Дублирование и удаление строки Xcode 9.x

#xcode8

#xcode8

Вопрос:

До Xcode 8.0 можно было настроить файл IDETextKeyBindingSet.plist. Однако теперь кажется, что изменение этого файла приводит к тому, что Xcode перестает нормально работать (например, перестают работать клавиши со стрелками), и больше не представляется возможным создавать собственные сочетания клавиш.

В Xcode никогда не было ярлыков дублирования и вставки строк. Ранее их можно было добавить в IDETextKeyBindingSet.plist, добавив следующее в нужных местах:

 <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>Delete Current Line</key>
<string>selectLine:, delete:</string>
<string>selectLine:, delete:</string>
  

Кто-нибудь знает, как добиться того же в Xcode 8.0 или выше?

Интересно, используют ли разработчики в Apple Xcode? А если они проверят StackOverflow? Или им запрещено делать это в соответствии с их трудовыми договорами?

РЕДАКТИРОВАТЬ: в Xcode 9.x, похоже, он снова работает.

РЕДАКТИРОВАТЬ: в Xcode 10.0 он снова сломан.

РЕДАКТИРОВАТЬ: в Xcode 10.1 он по-прежнему не работает, а также частично не работает копирование / вставка, что означает, что он не всегда работает. (Я все еще на High Sierra)

Комментарии:

1. Опубликуйте это на частном форуме Xcode, и, возможно, разработчик Apple ответит на него.

2. @DavidH Этот вопрос не является новым для разработчиков Apple, и в течение многих лет я наблюдаю, что они просто не отвечают на этот вопрос. Мне кажется, что у Apple есть политика, в которой есть функции, которые они не хотят добавлять или в которые они не верят, они просто не отвечают на них. В противном случае все другие IDE, по крайней мере, основные, имеют ярлыки дублирования и удаления строк, но XCode намеренно не включил их и никогда не рассказывал о своей философии. Я не могу представить жизнь разработчика без этих двух критических ярлыков, которые нужны снова и снова при написании кода.

3. Я хочу сказать, что у вас больше шансов, что какой-нибудь знающий человек разместит сообщение там или даже на более старом сервере списков Xcode, чем здесь. ИМХО. Это не повредит и займет всего несколько минут вашего времени. На самом деле, я опубликую это в listserv, поскольку я работаю над этим годами — если я получу ответ, я обновлю эту тему.

4. Здесь та же проблема. Вплоть до Xcode 8 мне приходилось выполнять этот нелепый танец замены IDETextKeyBindingSet.plist каждый раз, когда я обновляю Xcode, просто чтобы получить функциональность дублирующейся строки, которая есть у любой другой IDE в мире, но Apple отказывается добавлять в Xcode. Теперь с XCode 8 это больше не работает. Невероятно раздражает и медленно копировать и вставлять строку кода, когда нужно просто нажать command-D.

5. вы можете принять ответ, чтобы другие знали, что он все еще работает

Ответ №1:

Подтверждено, все еще работает в Xcode 14.1 на macOS Ventura 13.0

  1. Открыть /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist

  2. Добавьте следующие строки в корневой словарь

     <key>Sublime Commands</key>
    <dict>
        <key>Cut Current Line</key>
        <string>selectLine:, cut:</string>
        <key>Copy Current Line</key>
        <string>selectLine:, copy:</string>
        <key>Duplicate Current Line</key>
        <string>selectLine:, copy:, moveToBeginningOfLine:, paste:, moveToEndOfLine:</string>
    </dict>
  
  1. перезапустите Xcode
  2. зайдите в Key Bindings настройки и назначьте любой ярлык, который вы хотите, для новых трех команд. Просто найдите их key .

Жаль, что в 21 веке вам все еще приходится вручную добавлять такие базовые ярлыки.

Предостережение

Шаги должны повторяться после каждого обновления Xcode.

Комментарии:

1. спасибо за обновление. Я проверю это в ближайшее время. Какую версию ОС вы используете. Я нахожусь на El Capitan.

2. Я на macOS Sierra 10.12.2

3. К сожалению, у меня это не работает. У меня есть xCode 8.2.1 и Sierra 10.12.3

4. Я подтверждаю, что он работает для меня в Xcode 8 на Mac ElCapitan

5. Обновление XCode до версии 8.3.1 и macOS до 10.12.4 вернуло значение по умолчанию idetextkeybindingset.plist. Необходимо повторно добавить вышеуказанные строки в файл и перезапустить XCode.

Ответ №2:

Приведенный выше ответ, похоже, нарушен в Xcode 9.

Вот еще одно решение, которое, как я проверил, работает в Xcode 9 GM:

 <key>Custom Commands</key>
<dict>
    <key>Duplicate Current Line</key>
    <string>moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:</string>
</dict>
  

Ответ №3:

В предыдущем ответе были оставлены ошибочные пробелы, когда я попробовал это. Это работает для меня в Xcode 9:

 selectLine:, copy:, moveToBeginningOfLine:, paste:, moveToEndOfLine: