在 bash/readline 中按空格分隔的单词移动

在 bash/readline 中按空格分隔的单词移动

在 bash 行编辑中(或在任何使用 GNU readline 的程序中),Meta-f 向右移动一个“单词”,Meta-b 向左移动一个“单词”,其中“单词”由字母组成和数字。这些是forward-wordbackward-word命令。 (Meta-f 可以是 Alt 修饰键或前缀 Escape 键。)

例如,如果我输入了

cat /etc/motd

然后重复输入 Meta-b 将光标移动到m,然后是e,然后是c

是否有一个命令的移动方式类似,但由空格分隔的单词,/etc/motd单个单词也是如此?

(我经常使用很长的文件路径,并且我希望能够轻松地跳过它们。我的解决方法是重复键入现有的字移动命令,或者键入 ^X ^E 来启动编辑器。 )

在 vim 中,wb按单词向前和向后移动,和WB空格分隔的单词移动。我正在寻找类似的东西。

我浏览了readline文档,我怀疑答案是否定的,但也许我错过了一些东西。

答案1

如果你这样做,set -o vi那么 readline 将采用vim样式命令,并且w/Wb/B将具有与 Vim 本身相同的单词/WORD 行为。在编辑命令行时,我通常使用W/B跳过完整路径、URL 等。我从输出中看到绑定到和bind -l的 readline 命令是和。WBvi-forward-bigwordvi-backward-bigword

或者,我们有shell-forward-wordshell-backward-word。根据 bash 手册页,这些命令移动外壳元字符哪些是字符,未引用时,单独的单词。因此,它们比命令的“攻击性”要小一些vi-*-bigword,但对于跳过长路径,它们几乎总是能做到这一点。

因此,例如,您可以这样做,bind '"\C-x": shell-backward-word'并且Ctrl+ 的x行为将如所描述的那样。

答案2

你可以添加这个:

set keymap vi-move
"\e[EMACS~": emacs-editing-mode
set keymap emacs
"\e[VI~": vi-movement-mode
"\ed": "\e[VI~dW\e[EMACS~"
"\ef": vi-fWord
"\eb": vi-bWord

到您的 inputrc 或使用zsh更容易定制的地方。看有关详细信息,请参阅另一个问答的答案

答案3

Ctrl+ Alt+fCtrl+ Alt+b似乎就是您正在寻找的东西(可能Ctrl+ Meta+fCtrl+ Meta+b适合您)。

我来这里寻找这个,我从你的Meta+fMeta+中得到暗示b,并尝试与 结合Ctrl,它似乎对我有用!

我在 WSL 上使用 Ubuntu。不确定这是否重要。

相关内容