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

0 ответов

Другие вопросы по тегам