Как создать сочетание клавиш 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.