Estou tentando fazer com que o Bash imite o comportamento do KornShell93 (ksh
) quando os shells estão no modo de edição da linha de comando do Vi.
KornShell o padrão é o “modo normal Vi” (também conhecido como modo “comando”) e também coloca o cursor bem no início da linha de comando ao retroceder no histórico da linha de comando. Isso está em contraste com o Bash, que o coloca no “Vi modo de inserção “e no final da linha de comando.
Nas respostas para” Configuração do modo Bash vi para o modo de comando padrão ” , ele praticamente concluiu que “não há como fazer com que o padrão do Bash seja o” modo normal do Vi “quando a edição da linha de comando do Vi estiver habilitada.
Isso foi há mais de cinco anos s atrás agora, e eu me pergunto se isso mudou desde então?
E que tal colocar automaticamente o cursor no início da linha de comando? Existe alguma mágica desconhecida do Readline que pode me ajudar com isso?
Estou usando o Bash versão 4.4.5 (1) -release compilado a partir do código-fonte (o OpenBSD shells/bash
port) no OpenBSD-current (janeiro de 2017).
Comentários
- Como ponto de dados, Zsh se comporta como Bash ^ H ^ H ^ H ^ HReadline, diferente de ksh. (Bash ' s comportamento não ' t realmente Bash ' s, é ' s Readline ' s, que o Bash usa.)
Resposta
Parece que não há uma maneira adequada de inserir um Esc na linha de comando.
Enquanto em vi-insert
a maioria das alpha/numeric
teclas são usadas. Esc está bem longe e qualquer acorde (como Alt-j
( que funciona)) parecem mais complexos do que o desejado. Portanto, há uma maneira de converter duas chaves para um configu string rable.
A solução alternativa funciona usando a ideia Esta resposta
Basta adicionar a .inputrc
:
set editing-mode vi set vi-ins-mode-string \1\e[6 q\2 set vi-cmd-mode-string \1\e[2 q\2 set keymap emacs "\ee": vi-editing-mode "jk": "\eejk" "kj": "\eejk" set keymap vi-insert "\ee": emacs-editing-mode "jk": vi-movement-mode "kj": vi-movement-mode set keymap vi-command "\ee": emacs-editing-mode
Com isso, não importa onde você comece emacs
ou vi
, pressionando ambos jk
o colocará no modo de comando vi no início da linha .
Além disso, permite que você alterne para o modo emacs
com Esc – e .
Comentários
- Eu posso ' t vote a favor o suficiente! Eu me livrei das coisas do emacs e só preciso do " jk " atalho, eu não ' t need " kj ", então eu simplesmente tenho:
set editing-mode vi
set vi-ins-mode-string \1\e[6 q\2
set vi-cmd-mode-string \1\e[2 q\2
set keymap vi-insert
"jk": vi-movement-mode
e agora estou feliz!