В меню редактирования есть команда Duplicate
(с ярлыком по умолчанию ⌘ D) по умолчанию, но это (как Halley), предназначенный для дублирования в компоненте 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
.
-
Откройте IDETextKeyBindingSet.plist
.
-
Добавьте новый словарь и новый элемент команды в качестве снимок экрана ниже (назовите их, что вы хотите): ![Editing the plist]()
Это: selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:
-
Перезапустите Xcode и перейдите в раздел "Настройки" - "Ключевые привязки", выполните поиск своей команды.
-
Задайте комбинацию клавиш для команды: ![Key Bindings]()
-
Наконец, развязали силу привязки клавиш на Xcode... Наслаждайтесь!
Ответ 2
Работает в версиях Xcode: 7.1, 7.3, 7.3.1, 8.0, 8.1, 8.2, 8.3, 9.0, 9.1, 9.2, 10.0, 10.1, 10.2.1
Инструкция
- Дайте разрешения на редактирование следующих файлов. В большинстве случаев ОС не позволяет редактировать файлы.
sudo chmod 666 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist
sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/
- Отредактируйте файл, написав следующую команду:
open /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
- Добавьте следующие фрагменты XML:
<key>Customized</key>
<dict>
<key>Duplicate Lines</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
<key>Duplicate Current Line</key>
<string>selectParagraph:, delete:, undo:, moveRight:, yankAndSelect:, moveToBeginningOfLine:, moveToEndOfLine:</string>
</dict>
Скриншоты
![enter image description here]()
и перезапустите Xcode и перейдите к Preferences - Key Bindings
, найдите введенную нами команду (Duplicate Lines & Duplicate Current Line).
![enter image description here]()
Это оно.
Ответ 3
Сегодня я написал очень маленький плагин для Xcode 5, который удаляет и дублирует строки и варианты.
Вы можете загрузить его из моего репозитория GitHub:
Плагин XcodeKit - https://github.com/ptfly/XcodeKit
Ответ 4
@Hailei ответ был довольно хорошим, но имел неудачный побочный эффект сглаживания содержимого буфера обмена (оставив его заполненным содержимым дублированной строки), что является точно частью ручного метода копирования/вставки, который я был пытаясь избежать.
Итак, я изменил последовательность команд на это:
moveToBeginningOfLine:,
deleteToEndOfLine:,
yank:,
insertNewline:,
moveToBeginningOfLine:,
yank:
2 yank:
может не работать должным образом, если у вас NSTextKillRingSize
установлено что-то в стороне от 1
, но я уверен, что 1
по умолчанию, и вам нужно сделать некоторые нетривиальные работа по его изменению (требуется добавить запись в ~/Library/Preferences/.GlobalPreferences.plist
).
Ответ 5
Хорошо, я придумал это:
Версия для XCode 11:
selectParagraph:, delete:, undo:, moveRight:, yankAndSelect:
- не трогает буфер обмена
- работает с несколькими строками
- выбирает добавленные строки, поэтому может использоваться несколько раз без повторного выбора
- исправлен выбор в XCode 11
- лучше работает с отменой
Поскольку я применяю это изменение после каждого обновления XCode, я сделал для этого скрипт. Возможно, это может привести к некоторому повреждению, но я попытался сделать его относительно безопасным. Он создает копию файла, а затем заменяет строку его копией и дополнительной командой, используя perl. Требуется XCode для установки на /Applications/Xcode.app
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:, undo:, moveRight:, yankAndSelect:\<\/string>/g' /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist
Старая версия
(Я не уверен, совместим ли новый со старыми версиями, поэтому я оставлю его здесь):
selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:
и скрипт для более старой версии, чтобы избежать ручного редактирования файла:
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: изменен выбор абзаца
edit3: добавлена версия для XCode 11
Ответ 6
Мне интересно, почему никто не упомянул использовать ⌘ вместе с клавишами со стрелками (← ↑ → ↓) как для перемещения курсора, так и для выбора целых строк (добавив ⇧).
Я регулярно копирую целые строки (дубликаты), перемещая курсор в начало строки, используя ⌘ + ← (вместо ctrl + A), а затем используйте ⌘ + ⇧ + → (вместо ctrl + ⇧ + E), чтобы выбрать целую строку до конца, а затем скопировать/вставить.
Я столкнулся с другими темами, где никто не использует эти быстрые клавиши. Они глобальны в OS X, и я использую их все время! Гораздо меньше - акробатика;)
Ответ 7
Зачем дублировать одну строку? Дублировать весь абзац лучше. Моя последовательность:
Дублирующий текущий абзац
selectParagraph:,
delete:,
yank:,
moveToBeginningOfParagraph:,
yank:,
moveUp:,
moveToEndOfParagraph:
Удалить текущий абзац
selectParagraph:,
delete:,
moveUp:,
moveToEndOfParagraph:
Прекрасно работает в Xcode 4.6
Ответ 8
ОБНОВЛЕНИЕ: 17 сентября 2019 года
После обновления до Xcode 10.3 моя запись ключа duplicate line
из файла plist
исчезла. Я должен был добавить это снова. Тем не менее, связывание ключей все еще было там.
ОБНОВЛЕНИЕ: 28 мая 2019 г.
После обновления до Xcode 10.2 моя запись ключа duplicate line
из файла plist
исчезла. Я должен был добавить это снова. Тем не менее, связывание ключей все еще было там.
ОБНОВЛЕНИЕ: 23 декабря 2018 года
После обновления до Xcode 10.1 все мои ярлыки снова сломались. Но что-то другое было то, что после обновления файла plist для дублирования строк мне не нужно было определять привязки клавиш, они уже были там. Странно.
ОБНОВЛЕНИЕ: 14 октября 2018 года
Xcode 10: Кто-то в Apple очень любит копировать/вставлять и следит за тем, чтобы с каждой версией обновления XCode дублирование строк удалялось из каждой установки. Мы, разработчики, были крайне разочарованы этой ерундой, происходящей в XCode с тех пор, как навсегда, единственной IDE без опции дублирования строк. Я только что обновился до Xcode 10, и, как вы уже догадались, все мои сочетания клавиш удаляются вместе с моей функцией дублирования строки. Тем не менее, это можно исправить, как в оригинальном ответе. Небольшая разница на этот раз в том, что вам понадобится следующая строка:
<string>selectLine:, copy:, moveToBeginningOfLine:, paste:, moveToEndOfLine:</string>
ОБНОВЛЕНИЕ: Xcode 9: мне пришлось повторить свои ярлыки и дублирование строки и
удаление, но хорошо, что теперь вы можете снова редактировать IDETextKeyBindingSet.plist. Этот парень из Apple должен был быть в отпуске, когда они выпустили эту версию.
ОБНОВЛЕНИЕ: Xcode 8. Ошибка, вы не можете изменить файл IDETextKeyBindingSet.plist вообще. Xcode сбрасывает его при запуске. Этот высокопоставленный парень в Apple полон решимости заставить нас использовать копирование/вставку вместо простого дублирования строк, как во всех других IDE.
ОБНОВЛЕНИЕ: 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
Затем найдите <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>
![enter image description here]()
Теперь откройте/перезапустите XCode, перейдите в "Настройки" и перейдите на вкладку "Привязки клавиш". Используйте панель поиска для фильтрации и поиска новых ярлыков. Затем нажмите перед описанием ярлыка, чтобы назначить ему ярлык по своему вкусу. Убедитесь, что ваш ярлык не конфликтует с существующими ярлыками.
![enter image description here]()
Ответ 9
Я бы пересмотрел последовательность команд, чтобы:
selectLine:,
copy:,
moveToEndOfLine:,
insertNewline:,
deleteToBeginningOfLine:,
paste:,
moveToBeginningOfLine:,
deleteBackward:
Добавленный deleteToBeginningOfLine
поддерживает отступы дублированной строки.
Ответ 10
insertLineBreak необходимо, по крайней мере, для меня, чтобы сделать копию на новой строке, без нее я получил копию на той же строке
Ответ 11
У меня были большие проблемы, чтобы разблокировать файл.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>
Ответ 12
Вот мои записи Delete (CTRL + D) и Duplicate (CMD + SHIFT + D) из моего IDETextKeyBindingSet.plist. (в/Applications/Xcode.app/Contents/Frameworks/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>
Ответ 13
Любые возвышенные текстовые пользователи, которые хотели бы сопоставить 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>
Ответ 14
Если кому-либо отказано в доступе к редактированию IDETextKeyBindingSet.plist, вы можете предоставить права на чтение/запись:
sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
Ответ 15
Чтобы дополнить ответ Хайли, команды, которые работали лучше для меня, были:
selectLine:, copy:, moveRight:, moveLeft:, insertNewline:, paste:, deleteBackward:
Его предлагаемые команды копировали нужную строку на две строки ниже, для меня.
Ответ 16
<key>Duplicate Lines</key>
<string>selectLine:, copy:, moveToBeginningOfLine:, paste:</string>
Поддерживаются дубликаты строк. (Это работает в Xcode 9.2)