Как изменить предыдущее / следующее слово в bash?

20

Как настроить Ctrl-Left и Ctrl-Right в качестве сочетаний клавиш для предыдущего / следующего слова для bash (в настоящее время это alt-b и alt-f)?

ripper234
источник
Хм, разве этот вопрос не звонит в колокол?
Жиль "ТАК - перестань быть злым"
@ Жиль - я думал, что спрашивал что-то подобное раньше, да, извините. Закрыл оригинал в дупле (потому что он здесь больше, чем у Super User).
ripper234

Ответы:

26

Правильный ответ зависит от того, какой терминал вы используете.

Для Gnome Terminal или последних версий xterm, поместите это в ~ / .inputrc:

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

Для PuTTY, поместите это в ~ / .inputrc:

"\eOC": forward-word
"\eOD": backward-word

Для rxvt, поместите это в ваш ~ / .inputrc:

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

Возможно, вам не составит труда собрать все это в ~ / .inputrc.

Во всех случаях вам также нужно поместить это в ваш ~ / .bashrc (или ~ / .zshrc):

export INPUTRC=~/.inputrc

Если это не работает или у вас другой терминал, перейдите к своему терминалу и введите Ctrl+ V Ctrl+ ->. Тогда используйте это вместо "\e[1;5C"или "\eOC"выше. Повторите для Ctrl+ <-.

Обратите внимание, что вам нужно написать escape-последовательности клавиатуры, используя синтаксис inputrc , например

  • \C означает контроль
  • \eозначает escape (который появляется так же, как ^[при наборе текста с помощью Ctrl + V выше)
Mikel
источник
Ctrl + V, Ctrl -> печатает «^ [[1; 5C», и я использую gnome-терминал.
ripper234
2
Так что попробуй "\e[1;5C": forward-word. И тоже сделай Ctrl+ Vдля Ctrl+ Left Arrow.
Микель
Спасибо, работает как шарм. Медленно, но верно я научусь плавать в Linux. Почему они должны были сделать это настолько не интуитивным во-первых? (Вы должны признать, что ctrl-left, ctrl-right - лучший выбор)
ripper234
1
Если вы считаете, что Linux не интуитивно понятен, попробуйте установить FreeBSD по умолчанию или даже Solaris. Иметь bash в качестве стартовой оболочки - мечта. Кроме того, поскольку на клавиатурах не всегда есть клавиши со стрелками, Emacs и, следовательно, bash также поддерживают для этого ярлыки. Попробуйте использовать Ctrl-b и Ctrl-f на некоторое время.
penguin359
2
Прелесть UNIX / Linux систем в том, что их легко перемещать по настройкам. Как только вы настроите ваши любимые программы так, как вам нравится, просто скопируйте их. На самом деле я использую контроль версий для файлов моего домашнего каталога, таких как .inputrc, .bashrc, .vimrc и так далее. Я использую Mercurial, чтобы клонировать и поддерживать все настройки своего домашнего каталога в актуальном состоянии между компьютерами. Я также планирую в какой-то момент опубликовать мой репо, чтобы другие могли поделиться всем этим с моей тяжелой работой.
penguin359
3

Если вы используете ZSH, вам нужно выбрать другой метод, потому что, цитируя соответствующие части из Руководства ZSH ArchLinux :

Zsh не использует readline #like bash #, вместо этого он использует свой собственный и более мощный zle.

Он не читает / etc / inputrc или ~ / .inputrc.

Прочитав это руководство, я решил, что мне нужен современный источник ZSH, чтобы получить общее представление о том, как это сделать, и поэтому я нашел этот файл oh-my-zsh, который описывает поведение, которое я хотел, я скопировал соответствующие части, которые я хотел в мой ~ / .zshrc:

bindkey -e #Use emacs mode, it's more sane for beginners
bindkey '^[[1;5C' forward-word # [Ctrl-RightArrow] - move forward one word
bindkey '^[[1;5D' backward-word # [Ctrl-LeftArrow] - move backward one word
# Also, If you want to copy paste this into your zshrc,
# I'm pretty sure you would have to add this at the top : 
# setopt interactive_comments
mirandalol
источник
я пробовал Ctrl +
стрелка вправо