在 bash/readline 中,如果您想浏览命令,通常会有如下操作:
cat /home/foo/bar.txt /home/bar/baz.txt
如果我的光标位于行尾(^e),并且我想移回到第二个参数的开头,我该如何移动到(下一个/上一个)空格?
Readline 具有内置的Meta-f
(向前)和Meta-b
(向后),但是它们会在路径中的斜杠处停止,而不是一直移动到空格。
vim 具有W
并且B
可以执行此操作,但是默认情况下,vim 移动模式在 readline/bash 中未启用。
答案1
即使仍处于 emacs 移动模式,您也可以在 readline/bash 中使用 vim 移动命令。相关的 readline 命令是vi-fWord
和vi-bWord
。您可以在 中将它们绑定到键盘快捷键,例如 和 ,CTRL-f
如下CTRL-b
所示.bash_profile
:
bind '"\C-f":vi-fWord'
bind '"\C-b":vi-bWord'
请注意双引号非常重要。
您可以通过运行来确认绑定是否有效bind -p
答案2
有一些 Readline 命令可让您移动和处理单词,就像 shell 对待拆分它们一样:shell-forward-word
和shell-backward-word
1。
如果要将它们绑定到++Ctrl和++以避免覆盖现有绑定,可以使用MetafCtrlMetab
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 中引入。