Xcode duplicate line

В меню «Правка» есть команда « Duplicate (с ярлыком по умолчанию для D ), но она (как указал Халли) указывает на дублирование в компоненте Interface Builder Xcode.

Итак, как вы ( легко ) дублируете строку в Xcode 4?


Связанный с этим вопрос (с рабочим ответом) для Xcode 3 … и который не работает для Xcode 4.


Почему бы не просто скопировать и вставить?

Потому что это утомительно и влечет за собой слишком много акробатики:

либо (1) : переход к началу строки, а затем нажатие ⇧ ^ E , затем копирование с помощью ⌘C , переход к новой строке, выравнивание курсора и, наконец, вставка с помощью ⌘V ;

или (2) : ^ A (установите курсор на начало строки), ^ SPACE (установленная метка), ^ E (установите курсор на конец строки), ⇧ ^ W ( Select to Mark отметить, настроить), скопировать, новую строку и т. д.

Как сказал Фрэнк Шредер (в соответствующем вопросе ):

Весь смысл НЕ использовать быстрые клавиши Cmd-C / Cmd-V.

    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. Добавьте новый словарь и новый элемент команды в качестве снимок экрана ниже (назовите их, что вы хотите): Редактирование plist

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

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

    5. Задайте комбинацию клавиш для команды: Ключевые привязки

    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-снайперы.

     Customized  Duplicate Lines selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward: Duplicate Current Line moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:  

    снимок экрана отредактированного файла.

    введите описание изображения здесь

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

    введите описание изображения здесь

    Это оно.

    Сегодня я написал очень маленький плагин для Xcode 5, который удаляет и дублирует строки и подборки.

    Вы можете загрузить его из моего репозитория GitHub: плагин XcodeKit – https://github.com/ptfly/XcodeKit

    @ Ответ Хейли был довольно хорош, но имел неприятный побочный эффект, связанный с содержимым буфера обмена (оставив его заполненным содержимым дублированной строки), что является именно частью ручного метода копирования / вставки, который я пытался избежать ,

    Итак, я изменил последовательность команд на это:

     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 (требуется sudo для редактирования)

    /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

    Взгляд на Insertions and Indentations и под добавьте следующее:

     Insert New Line Below moveToEndOfLine:, insertNewline: Insert New Line Above moveUp:, moveToEndOfLine:, insertNewline: Duplicate Current Line selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward: 

    Затем найдите их и в разделе Deletions под :

     Delete Current Line selectLine:, delete: selectLine:, delete: 

    введите описание изображения здесь

    Теперь откройте / перезапустите 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/\selectWord:\<\/string>/'$'\selectWord:\<\/string\>\n\t\t\Duplicate Selection\<\/key\>\n\t\t\selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:\<\/string>/g' /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist 

    edit: minor fix 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 и введите «вставки», чтобы перейти к части «Вставки и отступы». Просто под вставьте этот xml-fragment:

     Duplicate line selectLine:, copy:, moveToEndOfLine:, insertNewLine:, paste:, deleteBackward: 

    Нажмите кнопку control + X , затем Y , затем Enter чтобы сохранить файл в редакторе nano.

    UPD: я придумал лучшее решение, которое добавляет дополнительную строку перед дублированием (полезно, когда вы хотите дублировать строку, у которой есть другая строка чуть ниже нее):

     Duplicate line selectLine:, copy:, moveToEndOfLine:, insertLineBreak:, moveUp:, paste:, moveToBeginningOfLine: 

    Вот мои записи Delete ( CTRL + D ) и Duplicate ( CMD + SHIFT + D ) из моего IDETextKeyBindingSet.plist. (в /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources)

    Я просто установил их в Xcode 4.6.1 (на основе ответа от user570753 выше и в другом месте)

      Custimozed  Delete Current Line deleteToBeginningOfLine:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteBackward:, moveDown:, moveToBeginningOfLine: Duplicate Current Line selectLine:, copy:, moveToEndOfLine:, insertNewline:, deleteToBeginningOfLine:, paste:, moveToBeginningOfLine:, deleteBackward:  

    Любые возвышенные текстовые пользователи, которые хотели бы совместить дублирующиеся строки и сублимацию в XCode, добавьте следующее в свой файл IDETextKeyBindingSet.plist

     Line Duplications  Duplicate Current Line Above selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:, moveUp: Duplicate Current Line Below selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:  

    Если кому-либо отказано в доступе к редактированию IDETextKeyBindingSet.plist, вы можете предоставить права на чтение / запись:

     sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist 

    Чтобы дополнить ответ Хайли, команды, которые работали лучше всего для меня, были:

     selectLine:, copy:, moveRight:, moveLeft:, insertNewline:, paste:, deleteBackward: 

    Его предлагаемые команды копировали нужную строку на две строки ниже, для меня.

     Duplicate Lines selectLine:, copy:, moveToBeginningOfLine:, paste: 

    Поддерживаются дубликаты строк. (Это работает в Xcode 9.2)

    Давайте будем гением компьютера.