Как создать сочетание клавиш Delete-Line в Xcode 8? Решения Xcode 3 больше не работают


80

В предыдущих версиях Xcodeможно было создать привязку клавиш для удаления текущей строки. Были разные решения, и они описаны, например, здесь:

Xcode: горячая клавиша удаления строки

Строка дублирования / удаления Xcode

http://bigdiver.wordpress.com/2009/09/11/configure-homeend-key-bidings-on-mac-os-x/

http://www.betadesigns.co.uk/Blog/2010/02/03/custom-xcode-shortcuts/

Все решения включают изменение одного из этих файлов:

~ / Library / Application Support / Xcode / Key Bindings / *. Pbxkeys
~ / Library / KeyBindings / DefaultKeyBinding.dict
~ / Library / KeyBindings / PBKeyBinding.dict

Хороший ресурс для существующих ярлыков Xcode 4- http://cocoasamurai.blogspot.com/2011/03/xcode-4-keyboard-shortcuts-now.html . Есть много перечисленных в отношении удаления, но ни одного для «удалить строку».

НО, эти решения НЕ работают с тех пор Xcode 4.

Обновление : проблема остается той же, что и уXcode 5.1.1

Обновление : проблема остается той же, что и уXcode 6.1 GM Seed 2

Обновление : по-прежнему применяется к Xcode версии 7.3 (7D175) по состоянию на 26 апреля 2016 г.

Обновление : шесть лет спустя Xcode 8.3 имеет встроенное решение. См. Ответ ниже.


Тем временем я решил создать макрос клавиатуры с помощью keyboardmaestro.com .
Клаас

Думаю, есть несколько решений, перечисленных ниже. Я лично использую макрос Keyboard Maestro.
Клаас

Ответы:


71

Похоже, в Xcode 8.3 наконец-то добавлена ​​команда Удалить строку :)

По умолчанию для него не назначено никакое сочетание клавиш, поэтому вам нужно будет добавить его самостоятельно:

  1. Откройте Xcode > Настройки > Привязки клавиш
  2. Искать Delete Line
  3. Добавьте сочетание клавиш в столбец Key

Привязки клавиш Xcode


1
ВОТ ЭТО ДА! Хорошо поймал! Никогда не думал, что такое когда-нибудь случится!
Клаас

Кто-нибудь догадался, что еще могло измениться?
Клаас

1
@Klaas, я тоже человек, никогда не думал, что увижу это! Я провел различие между IDETextKeyBindingSet.plistфайлами Xcode 8.2.1 и Xcode 8.3.2, и единственное обнаруженное изменение было этой командой Delete Line выше :(
Пауло Маттос

@FelixTurner Вы уже пробовали новую бета-версию Xcode 2 ?
Пауло Маттос

3
Я нашел обходной путь в Xocde 9 Beta . Пожалуйста, посмотрите мой ответ ниже. stackoverflow.com/a/45868495/1287336
Усонг Ким

95

После долгих поисков здесь и там я пришел к следующему решению:

Нажмите и удерживайте кнопку control, а затем нажмите AKK.

(Примечание: второй Kудаляет пустую строку).

Фактически это комбинация двух команд: Move to Beginning of Paragraph& Delete to End of Paragraph. Вы также можете использовать / устанавливать другие клавиши, а также можете использовать / устанавливать / изменять привязки клавиш для других команд, например Move to Beginning of Line& Delete to End of Line. Я использовал указанные выше (по умолчанию) привязки клавиш, как они мне подходят.

Редактировать:

Чтобы удалить более одной последовательных строк, сначала нажмите и удерживайте controlклавишу, а затем нажмите A(просто для перехода к началу абзаца / строки), затем нажмите и удерживайте, Kпока не будут удалены все строки (это будет работать, если курсор останется в начало).

Чтобы упростить задачу (для меня), я установил commandDдля Delete to End of Paragraphи home/ endперейти в начало / конец абзаца.


2
Хорошее решение, но мне действительно нужен единственный ярлык. Если я хочу удалить 5 строк, например, в TextWrangler, он нажимает всего пять раз cmd-d. Как ни странно cmd-d не используется в Xcode ...
Клаас

@Klaas, пожалуйста, посмотрите мой обновленный ответ. Возможно, это не то, чего вы ожидаете, но все же это хорошее решение.
Васу

как только ваш ответ получит несколько голосов, я приму его, поскольку Xcode 4 не будет включать это в ближайшее время.
Клаас

xCode ужасен! - Разработчик Android, использующий студию Android.
M'hamed

самый длинный ярлык когда-либо видел CTRL + A + K + K для удаления текущей строки
canbax

59

Понял! Это работает в XCode с 4.3 по 4.5, не требует дополнительных приложений и зависит от XCode.

Это решение в основном совпадает с описанной здесь командой Duplicate Line :

Отредактируйте файл plist

Это в /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

Обратите внимание, что:

  • связанный ответ предлагает использовать для этого XCode, но я считаю, что это приводит к сбою XCode
  • это путь для Lion - он может отличаться для других версий ОС
  • вам может потребоваться sudo или изменить разрешения для редактирования этого файла
  • закройте XCode перед редактированием

Добавить новый <dict>элемент

Добавьте этот текст только НАД закрытием <dict>внизу этого файла

    <key>Custom</key>
    <dict>
      <key>Delete Current Line In One Hit</key>
      <string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string> 
    </dict>

Обратите внимание, что:

  • Это внутри существующего, <dict>поэтому </dict></plist>после этого есть
  • Это связывает названное действие «Удалить текущую строку за один удар» с тремя ключевыми действиями в строке. Я поигрался с разными вариантами, чтобы получить правильную комбинацию. Например, если вы попробуете moveToBeginningOfLine, deleteToEndOfLine, а не наоборот, то использование его в пустых строках приведет к удалению строки и всей следующей строки. Что неприятно

Сохраните это и откройте XCode

Добавить новую привязку ключа в XCode

См. Скриншоты для этого в связанном ответе или сделайте следующее:

  1. Открыть настройки XCode
  2. Выберите привязки клавиш
  3. Нажмите на все
  4. В поле поиска введите «Удалить» и найдите «Удалить текущую строку одним нажатием».
  5. Добавьте новую привязку.

Это должно сработать, но с одной оговоркой. Я никогда не мог заставить XCode сохранить новую привязку. Та же проблема описана здесь , хотя мой обходной путь имел небольшое изменение:

  1. Создайте дубликат привязок по умолчанию (нажмите кнопку + в нижнем левом углу окна привязок и создайте дубликат)
  2. Установите новую привязку в дубликате
  3. Закройте диалоговое окно настроек (это вариант!)
  4. Снова откройте настройки и создайте новый дубликат старого дубликата и удалите старый дубликат.

Что за вздор, а? Но это работает. Теперь у меня есть Ctrl + D для удаления всей текущей строки в XCode 4.3 на Lion.


Обновление: одно ограничение, которое меня раздражает в этом решении, заключается в том, что оно удаляет только одну строку за раз, даже если у вас выбрано много. Моя естественная тенденция - выбрать 3 строки, нажать ctrl + D и стереть их все, но это не так.
Rhubarb

Обратите внимание, что если вы установите новую версию XCode, она не будет сохранена, тогда как ваши обычные настройки привязки клавиш сохранятся. (Я «обновляюсь», переименовав старый XCode.app и установив новый заново). Фактические привязки клавиш находятся в ~ / Library ... поэтому они сохранены, но эта новая запись - нет
Ревень

Да, он работает в Xcode 5 и сохраняет привязку клавиш, так что это может побудить других подумать, что это того стоит :)
RedYeti

@Rhubarb Чтобы удалить несколько строк сразу при наличии выделенного текста в этих строках и просто нажимая на ярлык просто добавить delete:перед последовательностью команд: delete:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:. Было бы здорово, если бы вы отредактировали это в своем ответе.
LopSae

2
Это работает в Xcode 6.2 (6C86e), и мне также не требовалось обходное решение, чтобы Xcode «сохранял» привязку клавиш. Ура! :)
Will Hains

16

Я нашел временное решение для Xcode 9 .

Откройте Xcode / Content / Frameworks / IDEKit.framework / Resources / IDETextK‌ eyBindingSet.plist и добавьте строки ниже.

Он имитирует действие, которое происходит в Xcode 8 с ограниченной поддержкой. Он может удалить только одну строку, но я как-то доволен. Надеюсь, это скоро исправят.

<key>Customized</key>
<dict>
    <key>Delete Line</key>
    <string>moveToBeginningOfLine:, deleteToEndOfLine:, moveDown:, deleteBackward:</string>
</dict>

После перезапуска Xcode вы можете увидеть настроенный элемент, Key Bindingsкак показано ниже.

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

Свяжите и используйте!

Edit) Я думаю, что ниже один лучше оригинального.

<string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string>

2
Правильный ответ Xcode 9 здесь. Он работает Xcode 9 версии 9.0 (9A235)
uspython

Почему это сломалось в Xcode 9? Это вроде как сработало для меня. Мне пришлось заменить значение существующего строкового значения Delete Line вместо добавления настраиваемого ключа.
Александр Смит

13

Я использую BetterTouchTool , это довольно прохладно:

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


Хорошая альтернатива, изменить plist не всегда хорошо. И легко потерять настройки. Помогите Apple сделать это подходящим.
Albert.Qing

Очень хорошая альтернатива для решения проблемы. К сожалению, это не атомарное действие, поэтому, если вы хотите отменить, вам нужно дважды нажать Cmd Z (два удаления). Также полезно добавить оконный менеджер (я бы также рекомендовал Spectacle).
Рудольф Реал

1
BTT - отличный инструмент во всех отношениях. Кроме того, этот метод вполне подходит для будущего, если у Apple есть действия, которые вы можете комбинировать, чтобы делать то, что вы ищете.
SuperDuperTango

1
Я не думал об использовании BTT (как того, что я уже использую!) Намного лучше, чем редактировать что-то внутри приложения. Кроме того, вы можете синхронизировать конфигурации между машинами, что мне и нужно.
Relequestual

9

Ответ Rhubarb правильный и работает, но одно: в файле plist есть более простая команда. Следуйте всем инструкциям Rhubarb 's, но

вместо

<string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string>

используйте ниже

<string>selectLine:, delete:</string>

Это более ясно и исключает любую возможность неисправности.

Я хочу написать это как комментарий, но моя «репутация» не позволяет мне этого делать.


Смешивание вашего решения с этим ответом решает проблему. Большое спасибо
marcelosalloum

8

попробуй это:

  1. Сначала откройте Xcode-> Настройки

  2. Выберите Key Bindigs

  3. поиск Удалить абзац

  4. Измените Удалить абзац на свой ярлык

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


Я понятия не имею, почему другие не используют это ПРОСТОЕ решение. Пожалуйста, проголосуйте за него, так как другие намного сложнее. Это тоже то, как вы ДОЛЖНЫ делать это: через привязку клавиш
контрольный список

Ничего не происходит Delete Paragraphв Xcode версии 9.0 (9A235). Вы тестировали это в Xcode 9?
Усонг Ким

2

Если вы являетесь пользователем Keyboard Maestro, просто создайте макрос, который выполняет следующие действия:

  • Командная стрелка влево
  • Стрелка вниз
  • удалять

Я назначил его Command-D и сделал доступным только в Xcode.


Я использую Better Touch Tool, и вы тоже сможете его назначить.
abc123

1

Похоже, что XCode теперь использует файл plist вместо файла dict, а новый формат не поддерживает добавление нескольких команд в привязку клавиш. Также, похоже, нет способа добавить пользовательские команды для привязки. Я обнаружил, что единственный способ заставить что-то работать - это установить привязку клавиш для отдельных действий, например ^Dдля deleteToEndOfLine:, затем ^Lдля moveToBeginningOfLine:, что ^L+^Dдаст вам комбинированный эффект.


Для этого уже есть некоторые настройки по умолчанию. ^ k для «удалить до конца строки», cmd-delete для «удалить до начала строки».
Клаас

В обычном (глобальном) файле keybindings.dict мы помещаем отдельные команды в массив, и это работает.
McUsr

1

Если вы не возражаете против привязки этого ключа в других приложениях, вы можете попробовать установить его в общих привязках клавиш Cocoa. Этому есть объяснение.


2
Я уже пробовал это, но глобальные привязки клавиш не работают в XCode 4. Я тестировал их в TextMate, и они там работают. Так что я сделал правильные модификации.
Клаас

1

кажется, что это невозможно сделать сейчас ... не стесняйтесь поправлять меня, если я ошибаюсь ... но вот мое новое решение ...

перейдите в настройки xcode, затем на вкладку привязок клавиш. продублируйте набор по умолчанию, чтобы вы не злились на меня, когда предложение, которое я делаю, ломает то, что вы будете использовать.

найдите 2 смежных ключа, которые не используются для каких-либо команд, которые вы используете ... ";", "'" возможно. (Я не использую команду n для нового файла, поэтому я выбрал n, m)

установите первый ключ на «Перейти к началу строки», а второй ключ на «Удалить до конца строки»

затем используйте эту последовательность, чтобы удалить строку ...

Альтернативно будет установлено что-то для выбора строки, а затем просто используйте удаление.



-1

Сначала откройте Xcode-> Настройки

Выберите Key Bindigs

Затем выполните поиск Удалить

Измените Удалить конец строки на свой ярлык (я предпочитаю CMD + D )

Это всеВот скриншот


Хм ... Это не удаляет всю строку.
Клаас

Вы должны установить курсор в начало строки
LoGoCSE

Хорошо, это то же самое, что и ctrl-k
Клаас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.