Як зробити так, щоб ⌘ ← і ⌘ → працював для домашнього та кінцевого комбінацій для терміналу?


21

Чому fn- ⇧- →(або інші) роблять будинок / кінець у Терміналі, а ⌘- →працює скрізь?

Тож для того, щоб було зрозуміло, питання полягає в тому, як змусити Термінал взяти Command+ ←і →додому, і в кінці?

Відповіді:


21

Як би зручно це було, Термінал не може легко надати потрібну функціональність.

Причина полягає в тому, що програми, що працюють у Terminal, мають різні правила переміщення курсору на початок / кінець рядка, наприклад:

  • bash(та інші оболонки) використовують CtrlAіCtrlE
  • viвикористання 0та $/Shift4

Інші програми можуть використовувати інші клавіші. Не існує універсальної комбінації клавіш для позиціонування курсору на початку / кінці рядка.

Звичайно, Terminal може підтримувати список комбінацій клавіш для ряду поширених програм, перевіряти, що працює, і надсилати правильні для вас клавіші, або він може надати пункт меню, наприклад, Перемістити курсор до початку рядка всередині оболонки ⌘ ← і потім надіслати CtrlAза сценою. Але я думаю, що інженери Apple подумали, що якщо ви заходите на територію CLI, ви знаєте її ідіосинкразії.

Як бічна примітка, Термінал надає Option←та Option→поводиться так, bashяк ви очікували, і переміщує курсор на початок попереднього / наступного слова. Це тому, що ці комбінації клавіш відображені в ( Escbта Escbдив. man bashРозділ "Команди для переміщення" для отримання додаткової інформації). В vi, наприклад, тільки останній (вид) робіт (в кінці цієї відповіді я покажу , як налаштувати viдля роботи з Option←і Option→).

Але завдяки псевдонімам Automator, AppleScript та bash ви можете отримати ⌘←та ⌘→працювати з bash(та, можливо, іншими оболонками) та vi.

Перший крок до карти ⌘←і ⌘→до CtrlAі CtrlE. На другому кроці я покажу вам, як налаштувати viна честь CtrlAі CtrlE(що, як результат, стане viсумісним із ⌘←і ⌘→).

Карта ⌘←і ⌘→до CtrlAіCtrlE

  1. У Терміналі перейдіть до Налаштування ...> Налаштування> [ваш активний профіль]> Клавіатура: введіть тут опис зображення

  2. Натисніть +, виберіть "Курсор вліво", "Контроль-Зсув" як модифікатор та дію "Надіслати текст:". Потім натисніть CtrlA( \001з'явиться в текстовому полі) і підтвердьте OK: введіть тут опис зображення

    (У попередній версії цієї відповіді я використовував "Shift" як модифікатор. Я помітив, що це налаштування суперечить ⌘shift←, що показує попередню вкладку "Термінал", якщо ви не відпустите ⌘негайно. Використовуючи "Control-Shift" виправляє це.)

  3. Тепер додайте комбінацію клавіш для "Курсор вправо", але натисніть CtrlE( \005з'явиться в текстовому полі). Підтвердити за допомогою OK.

  4. Відкрийте Автоматизатор (наприклад, натисніть, ⌘spaceщоб відкрити прожектор, і введіть Автоматизатор ), виберіть Файл> Створити і виберіть Service:

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

  5. Перетягніть Run AppleScriptна праву панель: введіть тут опис зображення

  6. Введіть такий сценарій:

    on run {input, parameters}
        tell application "System Events"
            tell application process "Terminal"
                key code 123 using {shift down, control down}
            end tell
        end tell
    end run
    

    і зберегти як Move Cursor to Beginning of Line:

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

  7. Повторіть кроки 4. до 6. з цим сценарієм:

    on run {input, parameters}
        tell application "System Events"
            tell application process "Terminal"
                key code 124 using {shift down, control down}
            end tell
        end tell
    end run
    

    і зберегти як Move Cursor to End of Line:

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

  8. Ось як виглядає зараз Термінал> Послуги:

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

Налаштувати viна честь CtrlAіCtrlE

  1. Відкрийте .bashrcулюблений редактор і додайте цей рядок:

    alias vi='vim -c "map <C-A> 0" -c "map <C-E> $" -c "map <Esc>b B" -c "map <Esc>f E"'

    Перші дві mapкоманди говорять vimпро інтерпретацію ControlEі ControlAяк $і 0, які переміщують курсор відповідно до початку чи кінця рядка.

    Останні дві mapкоманди вказують vimна переміщення курсору одним словом за один раз, як ви очікували при натисканні option←та Option→.

Коваджі

Ви помітите, що між моментом натискання ⌘←або ⌘→тим часом, коли курсор насправді рухається , існує невелика затримка .

Майте на увазі, що це працюватиме лише для програм, які шанують CtrlA/ CtrlE, тому ви, можливо, все ж захочете дізнатися конкретні комбінації клавіш кожної програми, яку ви використовуєте в Терміналі.

(Тестовано на macOS Sierra 10.12.4)


3
Дякую за детальну відповідь, чи є клопотання про те, щоб у наступний редизайн Apple включила кнопку додому / кінця :-)
— Джекі

Я радий, що можу допомогти.
— 1212

Вау .. все це, щоб отримати ⌘
— вигадливий

Це хороша відповідь, але її можна було б покращити, виключивши всю сторонніх відомостей, про viякі є абсолютно іншим додатком, ніж термінал.
— аксіопісти

1
Це чудова хитрість. Мені також вдалося запустити AppleScript, надіславши коди клавіш для "Головна" та "Кінець": "код ключа 115" та "код ключа 119" "
— Кеймон

2

Звичайно, це можливо.

Перш за все, ви можете скористатись безкоштовним інструментом "DoubleCommand", якщо у вас є клавіатура Windows з клавішами ДОМАШНІЙ / КОНЧІ, щоб змусити себе вести себе так, як слід (початок / кінець рядка).

По-друге, конкретно для терміналу, перейдіть до налаштувань, Клавіатура, відредагуйте піктограму / клавішу, яка виглядає як стрілка, спрямована вліво, виберіть «надіслати текст» і введіть ctrl + a. Готово!

Те саме для кнопки завершення ..

Якщо у вас немає клавіатури ПК, ви можете зробити те ж саме з іншими комбінаціями клавіш.

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