Mode vi en shell
Ceci n'a été testé que sous bash mais il se peut que cela marche aussi avec csh, zsh etc ...
Dans un terminal le mode d'édition de la ligne de commande est, par défaut, le mode emacs (oui comme l'éditeur des gens bizarres avec 6 bras). Mais il existe un mode vi, bien moins utilisé, en partie parce que vi est prévu plus pour éditer un fichier texte en entier qu'une seul ligne. Il est également bien moins intuitif que le mode emacs, en partie parce qu'il intègre le principe des modes et ce sans indiquer dans quel mode on est, parce que sinon c'est pas marrant.
Pour entrer en mode vi il suffit d'entrer la commande suivante:
<source lang="bash"> set -o vi </source>
On retrouve la plupart des commandes de vi(m) ainsi que le mode édition et le mode commande simplifié.
Pour conserver ce mode définitivement, insérez le set -o vi dans votre ~/.bashrc,
si ce fichier n'existe pas (ce qui serait surprenant) créez-le.
Sommaire |
Liste de commandes
Cette liste n'a pas pour but de recenser toutes les commandes existantes, mais plutôt les plus utiles.
| Commande | Effet |
|---|---|
<Esc>
|
Entre en mode commande |
<C-w>
|
Efface le mot précédent |
cc
|
Efface toute la ligne et entre en mode édition |
dd
|
Efface la ligne et reste en mode commande |
#
|
Ajoute la ligne actuelle dans l'historique SANS l'exécuter |
Remarque
Si vous souhaitez retourner dans le mode par défaut de bash, tapez simplement : <source lang="bash"> set -o emacs </source>
Il existe également un mode "fc" qui ne sera pas détaillé ici, vu qu'il n'a rien a voir avec Vim.
Astuces pour zsh
Afficher le mode courant
Astuce tirée du wiki zsh (en). Zsh possède plusieurs triggers qui sont appelés lors d'un changement de mode. De plus il est possible de regénérer le prompt.
Exemple d'utilisations (à ajouter dans .zshrc):
<source lang="bash">
function zle-line-init zle-keymap-select {
RPS1="${${KEYMAP/vicmd/-- NORMAL --}/(main|viins)/-- INSERT --}"
RPS2=$RPS1
zle reset-prompt
} zle -N zle-line-init zle -N zle-keymap-select </source> Ceci affiche le mode courant dans le prompt de droite.
Éditer la commande courante
Astuce tirée du wiki zsh (en).
Cette astuce permet de modifier la commande courante (ligne en cours de frappe dans zsh)
avec votre éditeur favori.
<source lang="bash">
autoload edit-command-line
zle -N edit-command-line
bindkey -M vicmd v edit-command-line
</source>
Grâce à cela, <ESC>v lance un éditeur (au hasard vim) avec le contenu de la commande en cours.
Une fois l'éditeur quitté, le contenu sauvegardé remplace la ligne en cours.
Plus d'infos
Pour plus d'infos sur le sujet, vous pouvez lire les pages suivantes :
- Working Productively in Bash’s Vi Command Line Editing Mode (en) un article d'introduction qui possède une table de résumé des commandes,
- bash vi editing mode (en) qui détaille plus ce mode, comment le customiser et l'activer dans d'autres programmes, dont readline et lftp,
- wiki zsh (en).