Mode vi en shell

De Vim-fr

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:

set -o vi

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.

Commandes en mode édition
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 :

set -o emacs

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):

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

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.

autoload edit-command-line
zle -N edit-command-line
bindkey -M vicmd v edit-command-line

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 :