Как заставить ⌘ ← и ⌘ → работать для домашней / конечной комбинации для Терминала?

21

Почему fn- - (или другие) делают дом / конец в терминале , но - работает везде?

Так что, для ясности, вопрос в том, как заставить Терминал взять Command+ и для дома, и для конца?

Джеки
источник

Ответы:

21

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

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

  • bash(и другие оболочки) использовать CtrlAиCtrlE
  • viиспользует 0и $/Shift4

Другие программы могут использовать другие ключи. Не существует универсальной комбинации клавиш для позиционирования курсора в начале / конце строки.

Конечно, Терминал может вести список сочетаний клавиш для ряда общих программ, проверять, что работает, и отправлять правильные ключи для вас, или он может предоставить пункт меню, такой как Переместить курсор в начало строки внутри оболочки ⌘ ←, а затем отправить 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. Нажмите +, выберите «Курсор влево», «Control-Shift» в качестве модификатора и действие «Отправить текст:». Затем нажмите CtrlA( \001появится в текстовом поле) и подтвердите, нажав OK: введите описание изображения здесь

    (В предыдущей версии этого ответа я использовал «Shift» в качестве модификатора. Я заметил, что этот параметр конфликтует с тем shift, что показывает предыдущую вкладку «Терминал», если вы не отпустите сразу. Использование «Control-Shift») исправляет это.)

  3. Теперь добавьте комбинацию клавиш для «Курсор вправо», но нажмите CtrlE( \005появится в текстовом поле). Подтвердите с помощью OK.

  4. Откройте Automator (например, нажмите, spaceчтобы вызвать Spotlight и введите Automator ), выберите «Файл»> «Создать» и выберите 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. Вот как Terminal> Services выглядит сейчас:

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

Настроить 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и ControlAas $и 0, которые перемещают курсор в начало или конец строки соответственно.

    Последние две mapкоманды говорят vimперемещать курсор по одному слову за раз, как и следовало ожидать при нажатии optionи Option.

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

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

Имейте в виду, что он будет работать только для программ, которые соблюдают CtrlA/ CtrlE, поэтому вы все равно можете узнать конкретные комбинации клавиш каждой программы, которую вы используете в Терминале.

(Проверено на macOS Sierra 10.12.4)

Жауме
источник
3
Спасибо за подробный ответ, есть ли петиция, чтобы Apple включила кнопку «Домой / Конец» при следующем редизайне :-)
Джеки,
Я рад, что смог помочь.
Jaume
Ничего себе .. все это, чтобы получить
чертовски
Это хороший ответ, но его можно улучшить, исключив всю постороннюю информацию, о viкоторой совсем другое приложение, нежели терминал.
Аксиописты
1
Это отличный трюк. Мне также удалось запустить AppleScript, отправив коды клавиш «Home» и «End»: «код ключа 115» и «код ключа 119» »
Keymon
2

Конечно, это возможно.

Прежде всего, вы можете использовать бесплатный инструмент «DoubleCommand», если у вас есть клавиатура Windows с клавишами HOME / END, чтобы заставить их вести себя так, как они должны (начало / конец строки).

Во-вторых, конкретно для терминала, перейдите в настройки, Клавиатура, отредактируйте значок / клавишу, которая выглядит как стрелка, указывающая вверх-влево, выберите «Отправить текст» и введите ctrl + a. Выполнено!

То же самое для кнопки окончания ..

Если у вас нет клавиатуры ПК, вы можете сделать то же самое с другими комбинациями клавиш.

Джордж Кацанос
источник