Torne o modo vi do Bash ' padrão em “ normal ” modo Vi (não “ insert ”) e coloque o cursor no início da linha, imitando KornShell

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!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *