Bash:readline+vim 在前进历史搜索中跳转到 cmd 模式,并按下 Delete

Bash:readline+vim 在前进历史搜索中跳转到 cmd 模式,并按下 Delete

我在我的 bash 中使用 vim 模式(即我设置 readline 以通过 使用 vim 模式~/.inputrc)。

如果我在插入模式下执行 ahistory-search-backward然后 history-search-forward输入一些已经输入的字符,则当前向搜索到达末尾时,bash 会跳转到命令模式。

例如,当我执行以下操作时,就会发生这种情况:

  • 类型echo "foo"
  • 类型e
  • echo "foo"按向上箭头(插入模式下显示提示)
  • 按向下箭头(提示echo "foo"在命令模式下显示)

如果我省略输入的步骤,就不会发生这种情况e

此外,每当我按下键时,bash 也会跳转到命令模式Delete,并且它会切换大写。

例如,当我执行以下操作时,就会发生这种情况:

  • 类型echi
  • 向左移动
  • 按下(命令模式下Delete显示提示)ecHi

这与向左移动无关,只有切换的字母会发生变化。

(第一个现象在 中以完全相同的方式发生ipython,它也使用readline。第二个现象在 中略有不同ipython:在命令模式下按下删除键会执行它应该执行的操作,在插入模式下按下删除键也会执行它应该执行的操作,除非我在行末,在这种情况下它也会跳回命令模式,但不会切换大写。)

编辑要修复密钥问题Delete,请"\e[3~": delete-char输入 '~/.inputrc`

我正在使用以下内容.inputrc

  1 set editing-mode vi
  2 set keymap vi-command
  3 "\e[A":history-search-backward
  4 "\e[B":history-search-forward
  5 "\e[C":forward-char
  6 "\e[D":backward-char
  7 ##
  8 "j":history-search-forward
  9 "k":history-search-backward
 10 set keymap vi-insert
 11 "\e[A":history-search-backward
 12 "\e[B":history-search-forward
 13 "\e[C":forward-char
 14 "\e[D":backward-char
 15 ##
 16 set show-mode-in-prompt on
 17 ##
 18 set vi-cmd-mode-string "\1\e[2 q\2\1\e[1;31m\2(cmd)\1\e[0m\2"
 19 set vi-ins-mode-string "\1\e[5 q\2(ins)"
 20 ##
 21 set keymap vi-insert
 22 RETURN "\e\n"
 23 set keymap vi-command
 24 v: ""

以及以下内容.vimrc

filetype plugin on
set shellslash
set grepprg=grep\ -nH\ $*
filetype indent on
let g:tex_flavor='latex'
set ff=unix
nmap <CR> o<Esc>
set number
set showcmd

相关内容