Imposta la ' modalità vi di Bash come predefinita su “ normal ” modalità Vi (non “ inserisci ”) e posiziona il cursore allinizio della riga, imitando KornShell

Sto cercando di convincere Bash a imitare il comportamento di KornShell93 (ksh) quando le shell sono in modalità di modifica della riga di comando di Vi.

KornShell il valore predefinito è “Vi modalità normale” (anche nota come modalità “comando”) e posiziona il cursore proprio allinizio della riga di comando quando si torna indietro nella cronologia della riga di comando. Questo è in contrasto con Bash, che ti mette in “Vi inserire la modalità “e alla fine della riga di comando.

Nelle risposte a” configurazione della modalità Bash vi per impostazione predefinita in modalità di comando ” , ha praticamente concluso che non cè modo di avere Bash come predefinito in “Modalità normale di Vi” quando la modifica della riga di comando di Vi è abilitata.

Questo è stato più di cinque anni s fa adesso, e mi chiedo se questo sia cambiato da allora?

E che dire del posizionamento automatico del cursore allinizio della riga di comando? Cè qualche magia sconosciuta di Readline che può aiutarmi in questo?

Sto usando Bash versione 4.4.5 (1) -release compilata dai sorgenti (il shells/bash port) su OpenBSD-current (gennaio 2017).

Commenti

  • Come punto dati, Zsh si comporta come Bash ^ H ^ H ^ H ^ HReadline, non come ksh. (Il comportamento di Bash ' non è ' davvero Bash ' s, è ' s Readline ' s, che Bash usa.)

Risposta

Sembra che non ci sia un modo adeguato per inserire un Esc nella riga di comando.

Mentre in vi-insert la maggior parte delle alpha/numeric chiavi viene utilizzata. Esc è abbastanza lontano e qualsiasi accordo (come Alt-j ( che funziona)) sembrano più complesse del previsto. Quindi, cè un modo per convertire due chiavi in una configurazione rable string.

La soluzione funziona utilizzando lidea di questa risposta

Basta aggiungere questo 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 

In questo modo, indipendentemente da dove inizi emacs oppure vi, premendo entrambi jk verrai messo in modalità vi-command in inizio della riga .

Inoltre, consente di passare alla modalità emacs con Esc e .

Commenti

  • Posso ' vota abbastanza! Mi sono sbarazzato della roba di emacs e mi serve solo la scorciatoia " jk ", non ' t ha bisogno di " kj ", quindi ho semplicemente: 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 ora lo sono felice!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *