Comment définir le mode d'édition de la ligne de commande vi
ou emacs
le Bash ET comment déterminer le mode actuellement défini?
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 vi
désarmements emacs
et 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 vi
est 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 vi
pour 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 vi
POSIX. set -o emacs
n'est pas (comme Richard Stallman s'est opposé au emacs
mode 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
, ksh
et yash
(notez qu'il -o
s'agit également d'un opérateur OU binaire pour [
).
set -o | egrep -w '^emacs|vi'
retournera si emacs ou vi est défini.Il y en a aussi
bind -V | grep editing-mode
.man bash
est énorme mais mérite une lecture approfondie.la source