Строки в Xcode дубликат
здесь is a Duplicate
команда в меню Правка (с ярлыком по умолчанию ⌘D), но это (как Халли указал), предназначенный для дублирования в части построителя интерфейса Xcode.
Итак, как вы (легко) дублировать строку в Xcode 4?
вопрос (С рабочим ответом) для Xcode 3 ... и что не работает для Xcode 4.
почему бы просто не скопировать и вставить?
потому что это утомительно и влечет за собой слишком много ручной акробатики:
или (1): переход к началу строки, а затем нажать ^ ^ E, затем копирование с ⌘C, переход к новой строке, alligning курсор, и наконец-то вставка с ⌘V;
или (2): ^A (установите курсор на начало строки), ^пробел (set mark), ^E (установите курсор на конец строки),^ ^ W (Select to Mark
; подгонянный), экземпляр, новая линия, ЕТК.
как Франк Шредер (в вопрос) писал:
весь смысл заключается в том, чтобы не использовать ярлыки Cmd-C/Cmd-V.
16 ответов
-
заходим в эту папку, которая содержит темную сторону силы:
- Xcode версии 4.2 или до:
/Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
- Xcode версии 4.3 или более поздней:
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
.
- Xcode версии 4.2 или до:
открыть
IDETextKeyBindingSet.plist
.-
Добавить новый словарь и новый командный пункт, как на скриншоте ниже (назовите их, что вы хотите):
вот:
selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:
перезапустите Xcode и перейдите в раздел Настройки-ключ Привязки, поиск вашей команды.
установить комбинацию клавиш для команды:
наконец-то развязал силу Привязок клавиш на Xcode... Наслаждайтесь!
добавление повторяющихся строк работает для Xcode версии 7.1 , 7.3, 7.3.1 8.0 , 8.1, 8.2, 8.3 и 9.0, 9.1, 9.2, а также
дайте persiomission для редактирования следующих файлов, большую часть времени ОС не позволит вам редактировать файлы.
sudo chmod 666 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist
sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/
редактировать следующий файл
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
написав следующую команду.
open /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
добавьте следующий XML-код snipets.
<key>Customized</key>
<dict>
<key>Duplicate Lines</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
<key>Duplicate Current Line</key>
<string>moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:</string>
</dict>
скриншот отредактирован файл.
и перезапустите Xcode и перейдите в Preferences - Key Bindings
, поиск команды, которую мы набрали (дублировать строки и дублировать текущую строку).
вот и все.
сегодня я написал очень маленький плагин для Xcode 5, который удаляет и дублирует строки и выборки.
вы можете скачать его с моего репозитория GitHub: плагин XcodeKit - https://github.com/ptfly/XcodeKit
ответ@Hailei был довольно хорошим, но имел неудачный побочный эффект избиения содержимого буфера обмена (оставляя его заполненным содержимым дублированной строки), что является именно частью ручного подхода копирования/вставки, которого я пытался избежать.
Итак, я изменил последовательность команд для этого:
moveToBeginningOfLine:,
deleteToEndOfLine:,
yank:,
insertNewline:,
moveToBeginningOfLine:,
yank:
в 2 yank:
s может работать не так, как предполагалось, если у вас есть NSTextKillRingSize
установить что-то кроме 1
, но я уверен, что 1
- это по умолчанию, и вам нужно выполнить нетривиальную работу, чтобы изменить его (для этого требуется добавить запись в ~/Library/Preferences/.GlobalPreferences.plist
).
Мне интересно, почему никто не упомянул, используя ⌘ С помощью клавиш со стрелками (←↑→↓) как для перемещения курсора, так и для выбора целых строк (путем добавления ⇧).
Я регулярно копирую целые строки (дубликат), перемещая курсор в начало строки с помощью ⌘+← (вместо ctrl+на), а затем использовать ⌘+⇧+→ (вместо ctrl+⇧+E), чтобы выбрать всю строку до конца, а потом копировать/вставить.
Я столкнулся с другими потоками, где никто не использует эти сочетания клавиш. Они глобальны в OS X, и я использую их все время! Гораздо меньше ручной акробатики;)
зачем дублировать одну строку? Дублировать весь абзац лучше. Моя последовательность:
Дублировать Текущий Абзац
selectParagraph:,
delete:,
yank:,
moveToBeginningOfParagraph:,
yank:,
moveUp:,
moveToEndOfParagraph:
Удалить Текущий Пункт
selectParagraph:,
delete:,
moveUp:,
moveToEndOfParagraph:
отлично работает в Xcode 4.6
Я бы рассмотрел возможность пересмотра последовательности команд на:
selectLine:,
copy:,
moveToEndOfLine:,
insertNewline:,
deleteToBeginningOfLine:,
paste:,
moveToBeginningOfLine:,
deleteBackward:
добавил deleteToBeginningOfLine
поддерживает отступ дублированной строки.
Xcode 7.1 и по-прежнему нет ярлыков для дублирования и удаления строк. Это единственная IDE, с которой я когда-либо работал без таких ярлыков. И я не могу представить жизнь разработчика без этих двух критических ярлыков.
основываясь на том, что я прочитал, я настроил свой Xcode для этих ярлыков и написал об этом в блоге: http://jixte.com/2016/03/30/line-duplicate-and-deletion-in-xcode-7-x/
вот как это можно сделать:
первый нам нужно изменить файл plist, который живет внутри Xcode.App bundle (необходимо sudo для редактирования)
/Применения/Xcode.app / содержание / фреймворки / IDEKit.framework / Resources / IDETextKeyBindingSet.файл plist
искать <key>Insertions and Indentations</key>
и под <dict>
тег добавить следующее:
<key>Insert New Line Below</key>
<string>moveToEndOfLine:, insertNewline:</string>
<key>Insert New Line Above</key>
<string>moveUp:, moveToEndOfLine:, insertNewline:</string>
<key>Duplicate Current Line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
затем найдите и эти внутри раздела <key>Deletions</key>
под <dict>
tag:
<key>Delete Current Line</key>
<string>selectLine:, delete:</string>
<string>selectLine:, delete:</string>
теперь откройте / перезапустите Xcode, перейдите к Настройки и перейдите на вкладку "привязки клавиш". Используйте строку поиска для фильтрации и поиска новых ярлыков. Затем нажмите перед описанием ярлыка, чтобы назначить ему ярлык по своему вкусу. Убедитесь,что ярлык не конфликтует с существующими ярлыками.
хорошо, я придумал это:
selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:
- не трогать буфер обмена
- работает с несколькими строками
- выбирает добавленные строки, поэтому может использоваться несколько раз без повторного выбора
поскольку я применяю это изменение после каждого обновления XCode, я сделал сценарий для этого. Возможно, это может нанести некоторый ущерб, но я попытался сделать его относительно безопасным. Он делает копию файла, а затем заменяет строку его копией и дополнительными команда с использованием perl.
cp /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist ~/Desktop/IDETextKeyBindingSet.plist; sudo perl -pi -e 's/\<string\>selectWord:\<\/string>/'$'\<string\>selectWord:\<\/string\>\n\t\t\<key\>Duplicate Selection\<\/key\>\n\t\t\<string\>selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:\<\/string>/g' /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist
edit: незначительное исправление edit2: изменено на выбор абзаца
insertLineBreak нужен, по крайней мере, для меня, чтобы сделать копию на новой строке, без него я получил копию на той же строке
у меня были большие проблемы, чтобы разблокировать .plist-файл на MacOS Sierra и Xcode 9, даже решение @Tim не сработало для меня. Если у вас такая же проблема, перейдите в терминал и сделайте следующее:
cd /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/
sudo chmod -R 777 *
nano IDETextKeyBindingSet.plist
несколько других возможных способов сделать это также описано здесь.
затем в Редакторе nano нажмите ^W
и типа 'встройка' прыгать 'вставками и углублениями часть. Чуть ниже <dict>
тег вставить этот XML-фрагмент:
<key>Duplicate line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewLine:, paste:, deleteBackward:</string>
пресс control + X
, тогда Y
, потом Enter
для сохранения файла в Редакторе nano.
UPD: я придумал лучшее решение, которое добавляет дополнительную строку перед дублированием (полезно, когда вы хотите дублировать строку, которая имеет другую строку чуть ниже):
<key>Duplicate line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertLineBreak:, moveUp:, paste:, moveToBeginningOfLine:</string>
вот мое удаление ( CTRL+D) и повторяющиеся (CMD+ SHIFT+D) записи из моего IDETextKeyBindingSet.файл plist. (в /Applications / Xcode.app / содержание / фреймворки / IDEKit.framework / версии / A / ресурсы)
Я просто установил их в Xcode 4.6.1 (на основе ответа от user570753 выше и в другом месте)
<key>Custimozed</key>
<dict>
<key>Delete Current Line</key>
<string>deleteToBeginningOfLine:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteBackward:, moveDown:, moveToBeginningOfLine:</string>
<key>Duplicate Current Line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, deleteToBeginningOfLine:, paste:, moveToBeginningOfLine:, deleteBackward:</string>
</dict>
любые пользователи sublime text, которые хотели бы соответствовать sublime duplicateLineUp и duplicateLineDown в XCode, пожалуйста, добавьте следующее к вашему IDETextKeyBindingSet.файл plist
<key>Line Duplications</key>
<dict>
<key>Duplicate Current Line Above</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:, moveUp:</string>
<key>Duplicate Current Line Below</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
</dict>
в случае, если кому-либо еще отказано в доступе к редактированию IDETextKeyBindingSet.plist вы можете дать себе права на чтение/запись по:
sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
чтобы дополнить ответ Хайлея, команды, которые работали лучше всего для меня, были:
selectLine:, copy:, moveRight:, moveLeft:, insertNewline:, paste:, deleteBackward:
его предложенные команды копировали желаемую строку двумя строками ниже, для меня.
<key>Duplicate Lines</key>
<string>selectLine:, copy:, moveToBeginningOfLine:, paste:</string>
дублировать строку(ы) поддерживается. (Это работает в Xcode 9.2)