我在我的 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