13

Я использую Ctrl - и Ctrl - в каждой системе Linux, на которой я работаю, но эти комбинации клавиш не работают в bash на моем Macbook Pro. Это работает Snow Leopard, и я использую встроенное приложение терминала.

Комбинации клавиш, кажется, не фиксируются чем-либо до или терминалом, потому что, если я перейду на один из моих серверов Linux, я могу использовать Ctrl - /→, чтобы перейти к следующему /предыдущему слову в командной строке. Однако, когда я пробую эту комбинацию клавиш в bash на моем Macbook, я просто получаю "C" для стрелки вправо и "D" для стрелки влево.

Любые идеи о том, как я могу заставить эти ключи работать в Darwin Bash?

3 ответа3

13

OS X использует привязку ключей emacs по умолчанию. Это верно практически для каждого приложения на OS X, это довольно приятно. Это означает, что такие вещи, как Ca и Ce, являются началом / концом строки. Вы также получаете изящное обратное уничтожение слов с помощью M-backspace, а также kill-line с помощью Ck.

Это должно означать, что в вашем терминале forward/backward-word связаны с Mf и Mb соответственно (M = Meta = alt/option), однако это не так. На OS X forward/backword-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)

3

вставьте в ~/.inputrc следующие строки:

"\e[5C": forward-word
"\e[5D": backward-word
0

В наши дни кажется, что escape-последовательности, которые выводят Ctrl-Arrows в терминале, изменились. Вот что работает для меня на сегодняшний день (конец 2018 года):

"\e[1;5C": forward-word "\e[1;5D": backward-word

Примечание: вы всегда можете определить фактические escape-последовательности, набрав cat -v в Терминале и нажав Ctrl-Стрелка влево или Ctrl-Стрелка вправо. Вот пример вывода для моей собственной стрелки Ctrl-Left:

^[[1;5C ^[[1;5C

Чтобы перевести на .inputrc lingo, замените escape-знак ^[ на \e и вставьте результат в двойные кавычки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .