bash/readline 用于“按空格分隔的单词向前移动?”

bash/readline 用于“按空格分隔的单词向前移动?”

在 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-fWordvi-bWord。您可以在 中将它们绑定到键盘快捷键,例如 和 ,CTRL-f如下CTRL-b所示.bash_profile

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

请注意双引号非常重要。

您可以通过运行来确认绑定是否有效bind -p

答案2

有一些 Readline 命令可让您移动和处理单词,就像 shell 对待拆分它们一样:shell-forward-wordshell-backward-word1

如果要将它们绑定到++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 中引入。

相关内容