Bash CTRL для перемещения курсора между словами / строками

86

Я привык использовать CTRLклавишу для более быстрого перемещения при использовании клавиш со стрелками влево и вправо (идет до конца слова, а не по одному символу за раз).

Могу я как-нибудь сделать это в bash?

Я, наверное, мог бы это закодировать, но мне было интересно, есть ли что-то более простое / уже сделано.

Брайан Руис
источник

Ответы:

95

При привязке клавиш readline по умолчанию ALT+ Bвозвращает на одно слово, ALT+ Fпереходит на одно слово вперед.

Настройка Ubuntu по умолчанию дополнительно предоставляет CTRLстрелки +, как вы привыкли. Они указаны /etc/inputrcи указаны ниже:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

Не знаю, зачем нам их трое ...

Томас
источник
20
@bryan_ruiz: разные клавиатуры (эмуляторы терминала и т. д.) выводят разные последовательности. Чтобы увидеть последовательность, нажмите Ctrl-v, затем клавишу. Для меня в PuTTY Ctrl-v Ctrl-RightArrow дает мне ^[OCто же самое, что и ваш. В xtermя получаю ^[[1;5что то же самое , как Томас.
Деннис Уильямсон
7
было бы лучше сделать это путем редактирования ~/.inputrcвместо
svassr
1
Не могу поверить, как долго я прожил без этого.
Райан Шиллингтон
4
Редактирование ~ / .inputrc может остановить загрузку «системного» (/ etc / inputrc). Также обратите внимание, что настройки 'set -o' - «set -o emacs» должны давать вам привязки клавиш стиля emacs в командной строке, в отличие, например, от «set -o vi» (после этого вам нужно будет нажать ESC перед попыткой использовать w или b).
Дэвид Гудвин
5
@DavidGoodwin После небольшого поиска добавление $include /etc/inputrcтакже загрузит системный файл inputrc.
SirGuy
42

Как объяснил Томас, вы можете добавить привязки к /etc/inputrc.

Другой вариант, который загружается каждый раз, когда вы входите в систему, помещает их ~/.bashrc следующим образом:

#use ctl keys to move forward and back in words
bind '"\eOC":forward-word'
bind '"\eOD":backward-word'

Я узнал, что вы можете использовать cat > /dev/null для просмотра символов, которые отправляет ваша клавиатура, например, CTRL + стрелка вправо показывает:

^[OC

где ^[то же самое, что и \e так, откуда берется код в bindкоманде.

Вы также можете найти такие привязки:

bind -p | grep forward-word

Все это чертовски круто, и я рад, что обнаружил еще немного возможностей bash.

Брайан Руис
источник
6
Я думаю, это повлияет только на bash, тогда как inputrcрешение также будет применяться к другим программам, которые используют строку чтения, например, интерпретатору Python, большинству других оболочек. Обратите внимание, что вы также можете ввести команды, ~/.inputrcесли у вас нет root или вы не хотите, чтобы они применялись ко всем пользователям.
Thomas
По какой-то причине это сработало для меня только тогда, когда я поменял порядок ваших строк выше. Дальнейшее примечание. Я использую Ubuntu 14.04LTS за шпатлевкой из Windows 8.1.
Ребекка Дессонвилл,
2
+1 специально для I learned that you can use cat > /dev/null to look at the characters that your keyboard is sending. #TIL
Sungam
3
Вы также можете просто ввести readи нажать Enter, чтобы добиться того же эффекта, что и cat > /dev/null. Я ленив, поэтому мне нравятся решения с меньшим набором текста. :)
theglossy1
ctrl + 4
вызывает
4

.Inputrc в вашем домашнем каталоге приведет к тому, что ctrl + left перестанет работать в Ubuntu (например).

Чтобы все заработало, добавьте в ~ / .inputrc следующее:

# Include system-wide inputrc, which is ignored by default when
# a user has their own .inputrc file.
$include /etc/inputrc

кредит для f.kowal

Константин Де Ла Рош
источник
1

Добавить $include /etc/inputrc

в ~/.inputrc

Работал для CentOS Linux версии 8.2.2004 (Core)

паблоэ
источник