在 bash 行编辑中(或在任何使用 GNU readline 的程序中),Meta-f 向右移动一个“单词”,Meta-b 向左移动一个“单词”,其中“单词”由字母组成和数字。这些是forward-word
和backward-word
命令。 (Meta-f 可以是 Alt 修饰键或前缀 Escape 键。)
例如,如果我输入了
cat /etc/motd
然后重复输入 Meta-b 将光标移动到m
,然后是e
,然后是c
。
是否有一个命令的移动方式类似,但由空格分隔的单词,/etc/motd
单个单词也是如此?
(我经常使用很长的文件路径,并且我希望能够轻松地跳过它们。我的解决方法是重复键入现有的字移动命令,或者键入 ^X ^E 来启动编辑器。 )
在 vim 中,w
和b
按单词向前和向后移动,和W
按B
空格分隔的单词移动。我正在寻找类似的东西。
我浏览了readline
文档,我怀疑答案是否定的,但也许我错过了一些东西。
答案1
如果你这样做,set -o vi
那么 readline 将采用vim
样式命令,并且w
/W
和b
/B
将具有与 Vim 本身相同的单词/WORD 行为。在编辑命令行时,我通常使用W
/B
跳过完整路径、URL 等。我从输出中看到绑定到和bind -l
的 readline 命令是和。W
B
vi-forward-bigword
vi-backward-bigword
或者,我们有shell-forward-word
和shell-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+f和Ctrl+ Alt+b似乎就是您正在寻找的东西(可能Ctrl+ Meta+f和Ctrl+ Meta+b适合您)。
我来这里寻找这个,我从你的Meta+f和Meta+中得到暗示b,并尝试与 结合Ctrl,它似乎对我有用!
我在 WSL 上使用 Ubuntu。不确定这是否重要。