Risposte:
Poiché la tua domanda è specifica su bash:
Per impostarlo in modo permanente per ogni nuova sessione:
echo 'set -o vi' >> ~/.bashrc
oppure (consigliato), aggiungere (o modificare) una riga in ./inputrc:
set editing-mode vi
Questo imposterà la modalità di modifica di readline che viene utilizzata da molti altri programmi oltre a bash.
Disattivare entrambe le opzioni è facile:
shopt -ou vi emacs
Per impostarne uno, sia:
set -o vi
O
shopt -os vi
Lo stesso per emacs
. Setting vi
unsets emacs
e viceversa.
Per elencare lo stato:
$ shopt -op emacs
set +o emacs
$ shopt -op vi
set -o vi
O entrambi contemporaneamente:
$ shopt -op emacs vi
set +o emacs
set -o vi
Per verificare se vi
è impostato:
shopt -oq vi && echo vi is set
Oppure (sintassi ksh):
[[ -o vi ]] && echo vi is set
emacs:
shopt -oq emacs && echo emacs is set
O:
[[ -o emacs ]] && echo emacs is set
oppure, per verificare che non sia impostata alcuna opzione:
! ( shopt -oq emacs || shopt -oq vi ) && echo no option is set
A set
:
set -o vi
O:
set -o emacs
(impostando uno si disinserisce l'altro. È possibile fare set -o vi +o vi
per disinserire entrambi)
Controllare:
if [[ -o emacs ]]; then
echo emacs mode
elif [[ -o vi ]]; then
echo vi mode
else
echo neither
fi
Questa sintassi viene ksh
. Il set -o vi
è POSIX. set -o emacs
non è (come Richard Stallman ha obiettato alla emacs
modalità specificata da POSIX) ma molto comune tra le implementazioni della shell. Alcune shell supportano modalità di modifica extra. [[ -o option ]]
non è POSIX, ma supportato da ksh, bash e zsh. [ -o option ]
è supportato da bash
, ksh
e yash
(si noti che -o
è anche un operatore binario OR per [
).
set -o | egrep -w '^emacs|vi'
restituirà se è impostato emacs o vi.