为什么不能在inputrc中将\ C-e设置为vi命令键盘映射的行尾?

时间:2019-01-22 02:00:04

标签: 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-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中没有其他内容

2 个答案:

答案 0 :(得分:1)

我只是试过了,对我也不起作用。但是bind命令可以正常工作:

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

读取行加载.inputrc似乎有些奇怪。因此,您可以将bind命令放入bashrc文件中。

答案 1 :(得分:0)

根据Chet Ramey的报告,通过bug-bash@gnu.org邮件列表,

  

这一直存在。默认的readline   vi命令模式键盘映射已将^ E切换为emacs编辑模式。以来   bash为此使用了“ set -o emacs”,bash readline初始化代码   解除键序列的绑定。它需要确保它的功能是   仍然是rl_emacs_editing_mode。

他提供了一个补丁,可能不在此处的SO解答范围内,因此我将其链接:http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00217.html

@pynex的解决方法很好。