Там естьDuplicate
команда в меню Edit (с по умолчанию ярлыка с ⌘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.
Ответы:
Перейдите в эту папку, содержащую темную сторону силы:
/Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
.Открыть
IDETextKeyBindingSet.plist
.Добавьте новый словарь и новый элемент команды, как показано на скриншоте ниже (назовите их, как хотите):
Это:
selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:
Перезапустите Xcode и перейдите в Preferences - Key Bindings, найдите свою команду.
Задайте комбинацию клавиш для команды:
Наконец-то раскрыли мощь привязок клавиш в Xcode ... Наслаждайтесь!
источник
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
указывает псевдоним. В противном случае я успешно выполнил шаги Галлея в версии 4.3.2 ... Я предлагаю вам сделать резервную копию исходного файла, а затем открыть его в самом Xcode (а не в TextEdit). Кроме того, что касается разрешений: их изменение (только для самого файла; рекурсия не требуется) в Finder работала нормально.<key>Custom</key> <dict> <key>Duplicate Current Line</key> <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string> </dict>
Обновление 2020
Работает с версиями Xcode: 11.3.1 тоже
Работает в версиях 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
инструкция
для версии 11.3.1
ниже 11.3 версии
для 11.3.1
для версий ниже
Скриншоты
и перезапустите Xcode и перейдите к
Preferences - Key Bindings
, найдите команду, которую мы ввели (Duplicate Lines & Duplicate Current Line).Это оно.
Для пользователей unix на заметку: -
источник
IDETextKeyBindingSet.plist
и добавил приведенный выше словарь, а затем сопоставил ключи в настройках XCode.Хорошо, я придумал это:
Версия для XCode 11:
Поскольку я применяю это изменение после каждого обновления XCode, я сделал для этого сценарий. Возможно, это может нанести какой-то ущерб, но я попытался сделать его относительно безопасным. Он делает копию файла, а затем заменяет строку своей копией и дополнительной командой с помощью perl. Требуется установка XCode на
/Applications/Xcode.app
Старая версия (я не уверен, совместима ли новая со старыми версиями, поэтому оставлю ее здесь):
и скрипт для более старой версии, чтобы избежать редактирования файла вручную:
edit: незначительное исправление edit2: изменено на выбор абзаца edit3: добавлена версия для XCode 11
источник
Сегодня я написал очень маленький плагин для Xcode 5, который удаляет и дублирует строки и выделения.
Вы можете скачать его из моего репозитория GitHub: Плагин XcodeKit - https://github.com/ptfly/XcodeKit
источник
Ответ @Hailei был довольно хорош, но имел неприятный побочный эффект в виде затирания содержимого буфера обмена (оставляя его заполненным содержимым дублированной строки), что как раз является частью подхода ручного копирования / вставки, которого я пытался избежать ,
Итак, я изменил последовательность команд на эту:
2
yank:
могут работать не так, как задумано, если выNSTextKillRingSize
установили что-то помимо1
, но я почти уверен, что1
это значение по умолчанию, и вам нужно проделать некоторую нетривиальную работу, чтобы изменить его (это требует добавления записи~/Library/Preferences/.GlobalPreferences.plist
).источник
defaults write -g NSTextKillRingSize 1
вместо того, чтобы играть с GlobalPreferences.plist. ;)moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, setMark:, moveToBeginningOfLine:, selectToMark:, yank:
Зачем дублировать одну строку? Лучше продублировать весь абзац. Моя последовательность:
Дублировать текущий абзац
Удалить текущий абзац
Прекрасно работает в Xcode 4.6
источник
Мне интересно, почему никто не упомянул об использовании ⌘вместе с клавишами со стрелками ( ←↑→↓) как для перемещения курсора, так и для выбора целых строк (путем добавления ⇧).
Я регулярно копирую целые строки (дублирую), перемещая курсор в начало строки с помощью ⌘+ ←(вместо ctrl+ A), а затем использую ⌘+ ⇧+ →(вместо ctrl+ ⇧+ E), чтобы выделить всю строку до конца, а затем скопировать / вставить.
Я сталкивался с другими темами, где, кажется, никто не использует эти сочетания клавиш. Они глобальны в OS X, и я использую их постоянно! Гораздо меньше ручной акробатики;)
источник
РЕДАКТИРОВАТЬ: 12 июля 2020 г. После обновления до Xcode 11.5 моя
duplicate line
ключевая запись изplist
файла снова исчезла. Пришлось добавить еще раз. Однако привязка клавиш все еще была на месте.РЕДАКТИРОВАТЬ: 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, и, как вы уже догадались, все мои сочетания клавиш удалены вместе с функцией дублирования строк. Однако это поправимо, как и в исходном ответе. Небольшая разница на этот раз в том, что вам понадобится следующая строка:
РЕДАКТИРОВАТЬ: Xcode 9: мне пришлось переделать свои ярлыки, дублирование и удаление строк, но хорошо то, что теперь вы можете снова редактировать IDETextKeyBindingSet.plist. Этот высокопоставленный парень из Apple, должно быть, был в отпуске, когда они выпустили эту версию.
EDIT: Xcode 8: Buggy, вы вообще не можете изменить файл IDETextKeyBindingSet.plist. Xcode сбрасывает его при запуске. Этот высокопоставленный парень из Apple действительно настроен заставить нас использовать копирование / вставку вместо простого дублирования строк, как во всех других IDE.
РЕДАКТИРОВАТЬ: Xcode 7.1 и до сих пор нет ярлыков для дублирования и удаления строк. Это единственная IDE, с которой я когда-либо работал, без таких ярлыков. И я не могу представить жизнь разработчика без этих двух важных ярлыков.
Вот как это можно сделать:
Сначала нам нужно изменить файл plist, который живет внутри пакета Xcode.app (требуется sudo для редактирования)
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist
Затем найдите
<key>Insertions and Indentations</key>
и под<dict>
тегом добавьте следующее:Затем найдите и в разделе
<key>Deletions</key>
под<dict>
тегом:Теперь откройте / перезапустите Xcode, перейдите в «Настройки» и перейдите на вкладку «Привязки клавиш». Используйте панель поиска для фильтрации и поиска новых ярлыков. Затем щелкните перед описанием ярлыка, чтобы назначить ему ярлык по своему вкусу. Убедитесь, что ваш ярлык не конфликтует с существующими ярлыками.
источник
Я бы подумал о том, чтобы изменить последовательность команд, чтобы:
Добавленный
deleteToBeginningOfLine
сохраняет отступ дублированной строки.источник
insertLineBreak нужно, по крайней мере, для меня, чтобы скопировать в новую строку, без нее я получил копию в той же строке
источник
У меня были большие проблемы с разблокировкой файла .plist на MacOS Sierra и Xcode 9, даже решение @Tim не сработало для меня. Если у вас такая же проблема, перейдите в терминал и сделайте следующее:
Несколько других возможных способов сделать это также описано здесь .
Затем в редакторе nano нажмите
^W
и введите «вставки», чтобы перейти к разделу «Вставки и отступы». Сразу под<dict>
тегом вставьте этот xml-фрагмент:Нажмите
control + X
, затемY
, затем,Enter
чтобы сохранить файл в редакторе nano.UPD: я придумал лучшее решение, которое добавляет дополнительную строку перед дублированием (полезно, когда вы хотите продублировать строку, которая имеет другую строку чуть ниже):
источник
Вот мои записи Delete ( CTRL+ D) и Duplicate ( CMD+ SHIFT+ D) из моего IDETextKeyBindingSet.plist. (в /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources)
Я просто установил их в Xcode 4.6.1 (на основе ответа user570753 выше и в другом месте)
источник
Любые пользователи возвышенного текста, которые хотели бы сопоставить sublime duplicateLineUp и duplicateLineDown в XCode, добавьте следующее в свой файл IDETextKeyBindingSet.plist
источник
Если кому-либо еще отказано в доступе к редактированию IDETextKeyBindingSet.plist, вы можете предоставить себе разрешения на чтение / запись:
источник
Чтобы дополнить ответ Хейли, лучше всего для меня работали следующие команды:
Предлагаемые им команды копировали желаемую строку двумя строками ниже для меня.
источник
Поддерживаются повторяющиеся строки. (Это работает в Xcode 9.2)
источник
Что касается Xcode 11, у меня ничего из вышеперечисленного не сработало. Первый ответ имел странное поведение, так как он вставлял строку после следующей строки. Однако следующий ответ сработал для меня.
источник