Як створити ярлик клавіатури видалення рядка в 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/

Усі рішення включають модифікацію одного з цих файлів:

~ / Бібліотека / Підтримка додатків / Xcode / Прив'язки ключів / *. Pbxkeys
~ / Бібліотека / Прив'язки / DefaultKeyBinding.dict
~ / Бібліотека / Прив'язки / 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

Оновлення : станом на 26 квітня 2016 року застосовується до Xcode версії 7.3 (7D175)

Оновлення : Через шість років Xcode 8.3 має вбудоване рішення. Дивіться відповідь нижче.


Тим часом я вирішив створити макрос клавіатури на сайті keyboardmaestro.com .
Клаас,

Думаю, є декілька рішень, перелічених нижче. Я особисто використовую макрос Keyboard Maestro.
Клаас,

Відповіді:


71

Схоже, Xcode 8.3 нарешті додав команду Видалити рядок :)

За замовчуванням йому не призначено жодного комбінації клавіш, тому вам потрібно буде додати його самостійно в:

  1. Відкрийте Xcode > Налаштування > Прив'язки клавіш
  2. Шукати Delete Line
  3. Додайте комбінацію клавіш у стовпець Ключ

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


1
ОЦЕ ТАК! Хороший улов! Ніколи не думав, що це колись станеться!
Клаас,

Хтось придумав, що ще могло змінитися?
Клаас,

1
@Klaas я теж людина, ніколи не думав, що побачу це! Я запустив різницю між IDETextKeyBindingSet.plistфайлами Xcode 8.2.1 та Xcode 8.3.2, і єдиною виявленою зміною була команда "Видалити рядок" вище :(
Паулу Маттос,

@FelixTurner Ви вже пробували з новим Xcode beta 2 ?
Паулу Маттос

3
Я знайшов обхідний шлях у Xocde 9 Beta . Будь ласка, дивіться мою відповідь нижче. stackoverflow.com/a/45868495/1287336
Wooseong Кім

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 за допомогою андроїд-студії.
M'hamed

найдовший ярлик, коли-небудь
побачений

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 і стерти їх усі - але це не так.
Ревінь

Зверніть увагу, що якщо ви встановите нову версію XCode, вона не збережеться, тоді як звичайні налаштування прив'язки ключів збережуться. (Я "модернізую", перейменувавши старий XCode.app та встановивши новий заново). Фактичні прив'язки ключів знаходяться в ~ / Library ..., тому вони зберігаються, але цей новий запис - ні
Ревінь

Так, це працює в Xcode 5 і зберігає прив'язку ключів, що може спонукати інших думати, що це турбується :)
RedYeti

@Rhubarb Щоб видалити кілька рядків відразу при наявності виділеного тексту в цих рядках і просто натискаючи на ярлик просто додати delete:перед послідовністю команд: delete:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:. Було б чудово, якби ви редагували це у своїй відповіді.
LopSae

2
Це працює в Xcode 6.2 (6C86e), і мені також не знадобився обхідний шлях, щоб змусити Xcode "зберегти" прив'язку ключів. Ага! :)
Вілл Хейнс,

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як показано нижче.

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

Зв’яжіть і використовуйте його!

Редагувати) Я думаю, що нижче один краще, ніж оригінальний.

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

2
Правильна відповідь на Xcode 9 тут. Це працює Xcode 9 Версія 9.0 (9A235)
uspython

Чому це зламалося в Xcode 9? Це спрацювало для мене якось. Мені довелося замінити значення для існуючого значення рядка "Видалити рядок" замість того, щоб додавати спеціальний ключ.
Олександр Сміт

13

Я використовую BetterTouchTool , це досить круто:

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


Хороша альтернатива, змінити plist не завжди добре. Та легко втратити налаштування. Довідка Apple зробить це придатним.
Альберт. Цин

Дуже хороша альтернатива для вирішення проблеми. На жаль, це не атомна дія, тому, якщо ви хочете скасувати, вам доведеться натиснути Cmd Z два рази (два видалення). Також менеджер вікон додає, що це корисно (я б також рекомендував Spectacle).
Рудольф Реал

1
BTT - це надзвичайно чудовий інструмент. Також цей метод є досить майбутнім доказом, якщо Apple виконує дії, які ви можете поєднувати, щоб робити те, що шукаєте.
SuperDuperTango

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

9

Відповідь ревеню правильна і працює, але одне: у файлі plist є більш проста команда. Дотримуйтесь усіх інструкцій ревеню , але

замість

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

використовувати нижче

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

Це стає більш зрозумілим і відкидає будь-яку можливість несправності.

Я хочу написати це як коментар, але моя "репутація" не дозволяє мені цього робити.


Поєднання вашого рішення з цією відповіддю вирішує проблему. Справді
дякую

8

спробуйте це:

  1. Спочатку відкрийте Xcode-> Налаштування

  2. Виберіть Key Bindigs

  3. пошук Видалити абзац

  4. Змініть " Видалити абзац" на ярлик

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


Я не уявляю, чому інші не використовують це ПРОСТО рішення. Будь ласка, проголосуйте за це, оскільки інші набагато складніші. Це також те, як ви повинні це робити: через прив’язку ключів
контрольний список

Delete ParagraphУ Xcode версії 9.0 (9A235) нічого не відбувається . Ви тестували це в Xcode 9?
Wooseong Kim

2

Якщо ви користувач клавіатури 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

Якщо ви не проти того, щоб це прив'язування клавіш було в інших програмах, ви можете спробувати встановити його в загальних прив'язах клавіш какао. Цьому є пояснення.


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

1

здається, це зараз неможливо зробити ... сміливо виправте мене, якщо я помиляюся ... але ось моє нове рішення ...

перейдіть до налаштувань xcode, а потім вкладку прив'язки клавіш. продублюйте набір за замовчуванням, щоб ви не злилися на мене, коли пропозиція, яку я роблю, порушує щось, що ви будете використовувати.

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

встановіть для першої клавіші "Перемістити до прохання рядка", а для другої клавіші "Видалити до кінця рядка"

потім використовуйте цю послідовність, щоб видалити рядок ...

alternate було б встановлено щось для вибору рядка, а потім просто використати delete.



-1

Спочатку відкрийте Xcode-> Налаштування

Виберіть Key Bindigs

Потім виконайте пошук Видалити

Змініть ярлик " Видалити кінець рядка" на свій ярлик (я віддаю перевагу CMD + D )

Це всеОсь скріншот


Хм ... Це не видаляє весь рядок.
Клаас,

Вам слід встановити курсор на початку рядка
LoGoCSE

Гаразд, це те саме, що ctrl-k
Клаас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.