Bash 为什么可以';I设置inputrc中的\C-e为vi命令键映射的行尾?

Bash 为什么可以';I设置inputrc中的\C-e为vi命令键映射的行尾?,bash,readline,Bash,Readline,我的.inputrc中有这个,但Control-e在命令模式下不会移动到行的末尾。所有其他绑定都可以工作 $if mode=vi set show-mode-in-prompt on set keymap vi-insert "\C-e": end-of-line "\C-a": beginning-of-line set keymap vi-command "\C-e": end-of-line "\C-a": beginning-o

我的.inputrc中有这个,但Control-e在命令模式下不会移动到行的末尾。所有其他绑定都可以工作

$if mode=vi
    set show-mode-in-prompt on

    set keymap vi-insert
    "\C-e": end-of-line
    "\C-a": beginning-of-line

    set keymap vi-command
    "\C-e": end-of-line
    "\C-a": beginning-of-line
$endif
我可以看出这需要:

$ bind -p | grep 'end-of-line'
"\C-e": end-of-line
"\eOF": end-of-line
"\e[F": end-of-line
我看不到任何其他东西与\C-e有关:

$ bind -p | grep 'C-e'
"\C-e": end-of-line
"\C-x\C-e": shell-expand-line
如果我将其设置为\C-l,它将工作。那么,在readline的vi模式下\C-e有什么特殊之处,我无法覆盖

唯一的另一个线索是\C-e引起终端嘟嘟声


我的.inputrc中没有其他内容,我刚刚尝试过,但它对我也不起作用。但是
bind
命令工作正常:

bind -m vi-command ' "\C-e": end-of-line '

读线加载
.inputrc
中似乎有点奇怪。因此,作为一种解决方法,您可以将
bind
命令放在
bashrc
文件中。

根据Chet-Ramey通过bug-bash@gnu.org邮寄名单

这是永远存在的。默认读线 vi命令模式keymap已绑定^E以切换到emacs编辑模式。自从 bash使用'set-o emacs'作为bash readline初始化代码 解除键序列的绑定。它需要确保它的功能 绑定到的仍然是rl_emacs_编辑模式

他提供了一个补丁,这可能超出了SO答案的范围,因此我将链接到它:


@pynex的解决方案运行良好。

Legend!谢谢那你觉得这像是bash/libreadline的bug吗?是的,我觉得这像是bash/libreadline的bug。您可以将其发布到gnu邮件列表,并请Chet查看。