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

ell*_*t42 7 bash readline

在 bash/readline 中,如果你想浏览一个命令,通常你会有这样的事情:

cat /home/foo/bar.txt /home/bar/baz.txt
Run Code Online (Sandbox Code Playgroud)

如果我的光标位于行尾 (^e),并且我想移回第二个参数的开头,我该如何移至(下一个/上一个)空格?

Readline 具有内置的Meta-f(forward) 和Meta-b(backwards),但它们将停在路径中的斜杠处,而不是一直移动到空白处。

vim 有WB哪个将执行此操作,但默认情况下在 readline/bash 中未启用 vim 移动模式。

ell*_*t42 11

即使仍处于 emacs 移动模式,您也可以在 readline/bash 中使用 vim 移动命令。相关的 readline 命令是vi-fWordvi-bWord。您可以将它们绑定到键盘快捷键,例如CTRL-fCTRL-b中的以下内容.bash_profile

bind '"\C-f":vi-fWord'
bind '"\C-b":vi-bWord'
Run Code Online (Sandbox Code Playgroud)

请注意,双引号很重要。

您可以通过运行来确认绑定是否正常工作 bind -p

  • 因为我喜欢让我的 readline 配置完全驻留在 ~/.inputrc 中,所以您可以删除 *bind* 和周围的单引号并将其直接添加到 ~/.inputrc (2认同)

Ben*_* W. 5

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

如果你想它们绑定到Ctrl+ Meta+fCtrl+ Meta+ b,以避免覆盖现有的绑定,就可以使用

bind '"\M-\C-f": shell-forward-word'
bind '"\M-\C-b": shell-backward-word'
Run Code Online (Sandbox Code Playgroud)

在命令行上,或添加

"\M-\C-f": shell-forward-word
"\M-\C-b": shell-backward-word
Run Code Online (Sandbox Code Playgroud)

到相关inputrc文件(通常是~/.inputrc)。

根据 的设置convert-meta\M-必须替换为\e


1在 Bash 4.0 中引入。