4

В bash/readline, если вы хотите перемещаться по команде, часто у вас есть такие вещи:

cat /home/foo/bar.txt /home/bar/baz.txt

Если мой курсор находится в конце строки (^ e), и я хочу вернуться к началу второго аргумента, как мне перейти к (следующему / предыдущему) пробелу?

Readline имеет встроенные Meta-f (вперед) и Meta-b (назад), но они останавливаются на косых чертах в путях, а не перемещаются полностью в пустое пространство.

У vim есть W и B которые будут это делать, но режим перемещения vim не включен в readline/bash по умолчанию.

2 ответа2

9

Вы можете использовать команды перемещения vim в readline/bash, даже находясь в режиме движения emacs. Соответствующие команды readline - это vi-fWord и vi-bWord . Вы можете связать их с сочетаниями клавиш, такими как CTRL-f и CTRL-b с помощью следующего в вашем .bash_profile:

bind '"\C-f":vi-fWord'
bind '"\C-b":vi-bWord'

Обратите внимание, что двойное цитирование имеет значение.

Вы можете подтвердить, что привязки работают, запустив bind -p

4

Существуют команды Readline, которые позволяют перемещать и обрабатывать слова так, как оболочка обрабатывает их для разбиения: shell-forward-word и shell-backward-word 1.

Если вы хотите связать их с Ctrl+Meta+f и Ctrl+Meta+b, чтобы избежать перезаписи существующих привязок, вы можете использовать

bind '"\M-\C-f": shell-forward-word'
bind '"\M-\C-b": shell-backward-word'

в командной строке или добавить

"\M-\C-f": shell-forward-word
"\M-\C-b": shell-backward-word

в соответствующий файл inputrc (обычно ~/.inputrc).

В зависимости от настройки convert-meta , \M- следует заменить на \e .


1 Появилось в Bash 4.0.

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