Réponses:
Puisque votre question est spécifique à bash:
Pour le définir définitivement pour chaque nouvelle session:
echo 'set -o vi' >> ~/.bashrc
ou (recommandé), ajoutez (ou modifiez) une ligne dans ./inputrc:
set editing-mode vi
Cela définira le mode d'édition de readline qui est utilisé par plusieurs autres programmes à côté de bash.
Il est facile de désactiver les deux options:
shopt -ou vi emacs
Pour en définir un, soit:
set -o vi
Ou
shopt -os vi
Pareil pour emacs. Réglage des vidésarmements emacset vice-versa.
Pour répertorier l'état:
$ shopt -op emacs
set +o emacs
$ shopt -op vi
set -o vi
Ou les deux à la fois:
$ shopt -op emacs vi
set +o emacs
set -o vi
Pour tester si viest défini:
shopt -oq vi && echo vi is set
Ou (syntaxe ksh):
[[ -o vi ]] && echo vi is set
emacs:
shopt -oq emacs && echo emacs is set
Ou:
[[ -o emacs ]] && echo emacs is set
ou, pour tester qu'aucune option n'est définie:
! ( shopt -oq emacs || shopt -oq vi ) && echo no option is set
À set:
set -o vi
Ou:
set -o emacs
(régler l'un désactive l'autre. Vous pouvez faire set -o vi +o vipour désarmer les deux)
Vérifier:
if [[ -o emacs ]]; then
echo emacs mode
elif [[ -o vi ]]; then
echo vi mode
else
echo neither
fi
Cette syntaxe vient de ksh. C'est set -o viPOSIX. set -o emacsn'est pas (comme Richard Stallman s'est opposé au emacsmode spécifié par POSIX) mais très courant parmi les implémentations de shell. Certains shells prennent en charge des modes d'édition supplémentaires. [[ -o option ]]n'est pas POSIX, mais pris en charge par ksh, bash et zsh. [ -o option ]est pris en charge par bash, kshet yash(notez qu'il -os'agit également d'un opérateur OU binaire pour [).
set -o | egrep -w '^emacs|vi'retournera si emacs ou vi est défini.