Bash: readline+vim переходит в режим cmd при прямом поиске истории и нажатии Delete
Я использую режим vim в моем bash (т.е. я настроил readline, чтобы использовать режим vim через ~/.inputrc
).
Если я сделаю history-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