Строки в 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 ответов


  1. заходим в эту папку, которая содержит темную сторону силы:

    • Xcode версии 4.2 или до: /Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
    • Xcode версии 4.3 или более поздней: /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources.
  2. открыть IDETextKeyBindingSet.plist.

  3. Добавить новый словарь и новый командный пункт, как на скриншоте ниже (назовите их, что вы хотите): Editing the plist

    вот: selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:

  4. перезапустите Xcode и перейдите в раздел Настройки-ключ Привязки, поиск вашей команды.

  5. установить комбинацию клавиш для команды: Key Bindings

  6. наконец-то развязал силу Привязок клавиш на 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>

скриншот отредактирован файл.

enter image description here

и перезапустите Xcode и перейдите в Preferences - Key Bindings, поиск команды, которую мы набрали (дублировать строки и дублировать текущую строку).

enter image description here

вот и все.


сегодня я написал очень маленький плагин для 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>

enter image description here

теперь откройте / перезапустите Xcode, перейдите к Настройки и перейдите на вкладку "привязки клавиш". Используйте строку поиска для фильтрации и поиска новых ярлыков. Затем нажмите перед описанием ярлыка, чтобы назначить ему ярлык по своему вкусу. Убедитесь,что ярлык не конфликтует с существующими ярлыками.

enter image description here


хорошо, я придумал это:

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)