Я использую Ctrl- ←и Ctrl- →на каждой системе Linux, с которой работаю, но эти комбинации клавиш не работают в bash на моем Macbook Pro. Он работает под управлением Snow Leopard, и я использую встроенное приложение Terminal.
Комбинации клавиш, похоже, не фиксируются ничем до или терминалом, потому что если я подключаюсь по ssh к одному из моих серверов Linux, я могу использовать Ctrl- ←/ →для перехода к следующему/предыдущему слову в командной строке. Однако, когда я пробую эту комбинацию клавиш в bash на моем Macbook, я получаю просто "C" для стрелки вправо и "D" для стрелки влево.
Есть идеи, как заставить эти клавиши работать в Darwin Bash?
решение1
OS X использует привязку клавиш emacs по умолчанию. Это верно практически для всех приложений в OS X, это довольно приятно. Это означает, что такие вещи, как Ca и Ce, являются началом/концом строки. Вы также получаете изящное уничтожение слов назад с помощью M-backspace, о, и уничтожение строки с помощью Ck.
Это должно означать, что в вашем терминале forward/backward-word привязаны к Mf и Mb соответственно (M = Meta = alt/option), однако это не так. В OS X forward/backward-word привязаны к M-→ и M-← по умолчанию.
Вы можете изменить это поведение, изменив конфигурацию библиотеки GNU Readline для вашей учетной записи. Это происходит в вашем ~/.inputrc
файле. Вы можете получить большой список команд, которые можно привязать, а man readline
также в онлайн-документации, напримерэто здесь..
Итак, отвечая на ваш вопрос, вы хотите переназначить то, что делает Readline, когда видит C-→ и C-←, так, чтобы он делал то же самое на вашем сервере Linux.
Синтаксис файла ~/.inputrc
довольно прост для того, что вам нужно сделать: key-sequence: action
.
Вот что вам нужно для получения желаемого поведения:
"\e[5C": forward-word
"\e[5D": backward-word
Вот еще одна страницас дополнительными полезными привязками.
(Возможно, вы могли бы обойтись копированием /etc/inputrc с вашего Linux-компьютера в OS X ~/.inputrc)
решение2
ОБНОВЛЕНИЕ Янв 2020
В новейших версиях OSX оболочка по умолчанию — zsh
. Поэтому магическое заклинание, чтобы заставить ctrl-arrowleft и ctrl-arrowright работать так, как ожидается, следующее:
bindkey '^[[1;5D' backward-word
bindkey '^[[1;5C' forward-word
(положите это в свой .zshrc
)
решение3
вставьте ~/.inputrc
следующие строки:
"\e[5C": forward-word
"\e[5D": backward-word
решение4
В эти дни, кажется, последовательности выхода, которые Ctrl- Arrowsвыводятся в терминале, изменились. Вот что работает для меня на сегодняшний день (конец 2018 года):
"\e[1;5C": forward-word
"\e[1;5D": backward-word
Примечание: вы всегда можете выяснить фактические последовательности экранирования, введя их cat -v
в Терминале и нажав Ctrl- Left Arrowили Ctrl- Right Arrow. Вот пример вывода для моего собственного Ctrl-Left Arrow:
^[[1;5C
^[[1;5C
Чтобы перевести на .inputrc
русский язык, замените знак escape ^[
на \e
и заключите результат в двойные кавычки.