Как сделать так, чтобы клавиши ctrl-стрелки двигались вперед / назад по слову за раз в Cygwin bash?


97

В установке Cygwin по умолчанию при использовании CTRL-LEFTARROW или CTRL-RIGHTARROW просто печатается 5C или 5D вместо пропуска слова за раз, как ожидалось.

Клавиши Home / End работают правильно, поэтому переназначение должно быть возможным.


Обратите внимание, что этот вопрос адресован Cygwin, но может иметь общее применение к системам Unix / Linux. Если вы используете PuTTY и обнаружили, что приведенные здесь решения не работают для вас, взгляните на вопрос о том, какие коды использовать для PuTTY .
Palswim

Это также случилось со мной под полным Linux; по некоторым советам в Интернете, я добавил ~/.inputrcфайл - который аннулировал все настройки Linux Mint по умолчанию. Вы можете получить их обратно, добавив $include /etc/inputrcв верхнюю часть вашего ~ / .inputrc (при условии, что / etc / inputrc является вашим общесистемным inputrc, который есть в Linux Mint)
user208769

Ответы:


134

Нашел решение , разместив его здесь для потомков.

Добавьте следующие строки в ~/.inputrc( C:\cygwin\home\<username>\.inputrc):

"\e[1;5C": forward-word   # ctrl + right
"\e[1;5D": backward-word  # ctrl + left 

Когда вы закончите, вы можете нажать, C-x C-rчтобы перечитать .inputrcфайл для текущего сеанса.

На что следует обратить внимание, если вам нужны другие подобные настройки: используйте 5Aи 5Bдля стрелок вверх и вниз, и 2xдля сдвинутых версий.

«Официальные» сопоставления клавиш описаны в Справочном руководстве по Bash , но для быстрого поиска соответствия клавиш в bash:

  1. тип Ctrl+V
  2. введите интересующую вас последовательность клавиш (например, Alt+ ). Это напечатало бы^[[1;3C
  3. удалить ведущий ^[и заменить его, \eчтобы сделать\e[1;3C
  4. поместите это значение в ваш .inputrcфайл.

Некоторые коды клавиатуры вообще не отображаются, например <kbd> Shift </ kbd> + <kbd> Enter </ kbd>. Как найти эти коды клавиатуры через Mintty / Windows / Cygwin?
CMCDragonkai

14

Вы можете перезагрузить файл .inputrc через:

bind -f ~/.inputrc

Источник


2
Это полезно, но на самом деле не является ответом на вопрос - возможно, было бы лучше в качестве комментария к другому ответу?
Мартин Томпсон

Добавлено в ответ @ Tom выше
dovetalk

7

Если вам нужно что-то, что будет работать без пользовательских настроек среды, например, при работе с общей учетной записью на сервере или просто для ограничения объема используемой пользовательской конфигурации, Bash имеет встроенные средства для этого, которые работают в Cygwin.

А именно Alt+, fчтобы двигаться вперед и Alt+, bчтобы двигаться назад.

http://www.gnu.org/software/bash/manual/html_node/Commands-For-Moving.html


4
Спасибо, хотя я знаю об этих ключах и использую их. Я просто также использую клавиши со стрелками, когда это удобно, и не хочу, чтобы они произносили управляющие коды вместо того, чтобы делать вменяемые вещи и перемещать курсор.
Том

0

При использовании rxvt с cygwin я обнаружил, что решение по этой ссылке работает для меня: control_arrow_keys_in_rxvt .

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

"\eOd": backward-word
"\eOc": forward-word

Это когда дополнительный слой меняет передаваемые ключи (но он не отвечает на заданный вопрос).
Никана Рекламикс

0

Это решение также работает в msys2консолях:

"\e[1;5C": forward-word   # ctrl + right
"\e[1;5D": backward-word  # ctrl + left 

Просто поместите эти комбинации клавиш в .inputrcфайл.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.