Xcode повторяющаяся строка
здесь - это a Duplicate команда в меню Правка (с ярлыком по умолчанию ⌘D), но он (как указал Галлей) предназначен для дублирования в части построителя интерфейса Xcode.
Итак, как вы (легко) дублировать строку в Xcode 4?
вопрос (с ответом) для Xcode 3 ... и что не работает для Xcode 4.
почему бы и нет просто скопируйте и вставьте?
потому что это утомительно и влечет за собой слишком много ручной акробатики:
или (1): переход к началу строки, а затем нажать ⇧^E, затем копирование с ⌘C, переход к новой строке, alligning курсор, и наконец-то вставка с ⌘V;
или (2): ^A (установите курсор на начало строки),^пробел (set mark), ^E (set курсор к концу строки),⇧^W (Select to Mark; подгонянный), экземпляр, новая строка, etc.
Как сказал Франк Шредер (в соответствующем вопросе):
весь смысл в том, чтобы не использовать ярлыки 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.открыть
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 был довольно хорошим, но имел неудачный побочный эффект clobbering содержимое буфера обмена (оставляя его заполненным содержимым дублированной строки), что является именно частью ручного подхода копирования/вставки, которого я пытался избежать.
Итак, я изменил последовательность команд для этого:
moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:2
yank:s может не работать должным образом, если у вас естьNSTextKillRingSizeустановить что-то кроме1, но я уверен, что1- это по умолчанию, и вы должны сделать некоторые нетривиальные работы, чтобы изменить его (это требует добавления записи в~/Library/Preferences/.GlobalPreferences.plist).
Мне интересно, почему никто не упоминал об использовании ⌘ С помощью клавиш со стрелками (←↑→↓) как для перемещения курсора, так и для выбора целых строк (путем добавления ⇧).
Я регулярно копирую целые строки (дубликаты), перемещая курсор в начало строки с помощью ⌘+← (вместо ctrl+A), а затем использовать ⌘+⇧+→ (вместо 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.приложение/содержание/фреймворки / 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>- тег:<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правка: исправлены 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. (in / Applications / Xcode.приложение/содержание/фреймворки / IDEKit.framework / Versions /A / Resources)
Я просто установил их в 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 file
<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)






Comments