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!