
"Plus loin avec Vim" est une sélection de commandes à se rappeler ou à découvrir, permettant de travailler plus vite avec notre éditeur favori!
Cet article est destiné aux lecteurs déjà un peu familiarisés avec vim, ou bien comme une série de rappels pour des utilisateurs un peu plus avancés.
Un bloc est défini entre un marqueur placé et la position actuelle du curseur. Une action peut alors être définie sur ce bloc.
Il est possible de définir plus de 26 marqueurs différents sur le contenu d'un fichier en édition. Au moins 26 grâce aux lettres de l'alphabet en minuscules, des marqueurs spéciaux existent, et enfin des marqueurs définis avec des lettres majuscules sont considérés comme globaux à un ensemble de fichiers en édition sous vim.
| ma | marque la position actuelle du curseur avec la lettre a. |
Un repositionnement du curseur défini un bloc entre la position actuelle et le marqueur déjà placé. S'il y a déjà plusieurs marqueurs placés dans le texte, la nouvelle position du curseur définie autant de blocs.
| d'a | Pour supprimer le bloc "a", il suffit alors de lancer la commande. |
| y'a | Pour copier le bloc "a", il suffit alors de lancer la commande. |
| `a | Pour aller à la position du marqueur "a". |
| `" | place le curseur à la position où il se trouvait quand le fichier avait été quitté. |
| `. | place le curseur à la position de la dernière modification. |
| :marks | donne la liste des marqueurs. |
Des commandes shell peuvent être lancées à l'intérieur de vim. Elles peuvent agir sur une sélection dans un texte en édition, c'est ce que l'on entend par filtres. La sortie d'une commande peut aussi être insérée au sein d'un texte en édition.
Pour trier les 10 premières lignes d'un fichier en édition, se placer sur la première ligne (1G) et lancer la commande :
!10Gsort <entrée>
!! permet d'insérer la sortie d'une commande système dans le fichier :
!!ls
Enfin, pour simplement lancer une commande shell au sein de vim et visualiser la sortie sans interférer sur le texte :
:!commande_shell
Pour basculer dans un shell (taper la commande exit pour revenir à l'édition vim) :
:!shell
Il est intéressant et pratique de travailler avec plusieurs fichiers en même temps. Chacun des fichiers édités occupant un buffer (voir plus loin).
Par exemple, pour travailler avec trois fichiers en même temps :
shell$ vim file1 file2 file3
Par défaut, le premier fichier file1 est visualisé.
Les actions possibles sur ces fichiers sont les suivantes :
| :next | visualiser le fichier suivant. Pas possible directement si le fichier en cours d'édition à été modifié sans être enregistré. |
| :wnext | visualiser le fichier suivant en enregistrant le fichier actuel. |
| :next! | forcer l'édition du fichier suivant sans enregistrer les modifications du fichier en cours. |
| :previous, :wprevious, :previous! | identiques aux 3 commandes ci-dessus, mais s'appliquant à un fichier qui précède. |
| :set autowrite | permet de passer à un autre fichier avec enregistrement automatique du fichier en cours d'édition. |
| :count next | éditer le n-ième fichier qui suit (par exemple: :2 next pour éditer le deuxième fichier après celui en édition). |
| :args | liste l'ensemble des fichiers qui sont en édition sous vim. |
| :args file4 file5 file6 | effectue une nouvelle sélection de fichiers en édition. |
| :rewind (et :first dans les dernières versions de vim) | Visualise le premier fichier de la sélection. |
| :last | édite le dernier fichier de la sélection. |
| CTRL-O | Sauter à une position plus ancienne (prend en compte l'ensemble des fichiers édités). |
| CTRL-I | Sauter à une position plus récente (prend en compte l'ensemble des fichiers édités). |
| CTRL-^ | Edition du fichier alternatif (le fichier édité précédemment). |
Plusieurs fenêtres peuvent être visualisables simultanément, séparées entre elles horizontalement ou bien verticalement
| :split | sépare la fenêtre en deux horizontalement. Chaque fenêtre présente alors le même contenu. Pratique pour visualiser en même temps 2 zones d'un même contenu de fichier. |
| CTRL-Ww | passe le curseur d'une fenêtre à l'autre. |
| CTRL-Wj | passe le curseur à la fenêtre en dessous. |
| CTRL-Wk | passe le curseur à la fenêtre au dessus. |
| CTRL-Wh | passe le curseur à la fenêtre de gauche. |
| CTRL-Wl | passe le curseur à la fenêtre de droite. |
| CTRL-Wq ou :q | ferme la fenêtre courante (où se trouve le curseur). |
| :split file | ouvre une fenêtre horizontalement sur le contenu du fichier file. |
| :split +commande file | ouvre une fenêtre sur le fichier file en exécutant une commande dessus. |
Exemple : Ouverture du fichier file en effectuant la recherche de la chaine de caractère "string" :
:split +/string file
| :count split file | ouvre une fenêtre horizontale sur file sur count lignes. |
| :count split +commande fichier | synopsis de la commande split |
| :vsplit | sépare la fenêtre en deux fenêtres verticales de contenus identiques. |
| :count vsplit +commande fichier | synopsis de la commande vsplit |
| :new | nouvelle fenêtre sur un contenu vide. |
| :sview | nouvelle fenêtre horizontale sur un contenu de fichier en lecture seule. |
Des commandes qui permettent de changer la taille des fenêtres :
| CTRL-W+ | Augmente la taille de la fenêtre sélectionnée d'une ligne. |
| count CTRL-W+ | augmente la taille de la fenêtre de count lignes. |
| CTRL-W- | diminue la taille de la fenêtre de une ligne. |
| CTRL-W= | égalise la taille des fenêtres. |
| CTRL-W_ | augmente la taille de la fenêtre au maximum. |
Le buffer est un espace de travail de vim. Il peut être initialisé avec le contenu d'un fichier lorsqu'il est édité. L'édition multiple de fichiers, comprenant entre autres les fichiers édités dans les fenêtres de vim sont autant de buffers.
Les actions que l'ont peut effectuer sur les buffers sont les suivantes :
| :buffers | liste les buffers. |
| :buffer number | sélectionne le buffer numéro number. |
| :buffer file | sélectionne un buffer par son nom. |
| :sbuffer number | sélectionne le buffer number dans une nouvelle fenêtre. |
| :sbuffer file | sélectionne un buffer par son nom dans une nouvelle fenêtre. |
Autres commandes sur les buffers : :bnext, :count bnext, :count sbnext, :count bprevious, :count sbprevious, :blast, :sblast, :brewind, :sbrewind, :bfirst, :sbfirst, :bmodified, :sbmodified,
La commande v permet de passer en mode "visual" classique, et la commande CTRL-V permet de passer en mode "visual block". Ce dernier mode permet de travailler sur des colonnes que ce soit pour les sélections de colonnes mais aussi pour lancer des commandes sur celles-ci.
En mode "visual", il est possible d'effectuer des actions d'indentation sur la sélection avec les commandes suivantes :
| > | indentation de la sélection. |
| n> | n indentations de la sélection. |
| < | supprimer une indentation sur la sélection. |
Insertion de la chaine de caractère "string" à gauche d'une sélection en mode "visual bloc" :
Istring<Esc>
La commande % placé sur l'un deux, montre le correspondants pour les paires {}, [], ().
Le décalage (en indentation) de tout un bloc défini par une des paires décrites ci-dessus :
| %> | décalage à droite. |
| %< | décalage à gauche. |
Décalage du contenu d'un bloc : >i{
La commande K donne la page de manuel de la commande ou fonction sous le curseur (si elle existe ;) ).
Les tags doivent être générés avant de pouvoir être utilisés dans vim. La commande ctags (que l'on trouve dans le paquet exuberant-ctags de Debian GNU/Linux) permet de générer le fichier de tags sur un ou plusieurs fichiers de sources (C, Ruby, Perl, Python,....).
| :tag nom_fonction | aller à la définition de la fonction. |
| CTRL-] | aller au tag du mot sous le curseur (à sa définition si le mot est une fonction). |
| CTRL-T | retour au tag précédent. |
| :stag tag | ouvre le fichier contenant le tag et le visualise dans une nouvelle fenêtre. |
| CTRL-W] | idem pour le tag sous le curseur. |
| :tselect command | liste les tags pour une commande. |