Commandes de bases

De Vim-fr


Les commandes de bases de Vim

Attention: Ceci n'a pas pour but de vous apprendre ViM, ceci est juste un rappel des fonctions de bases en cas de trous de mémoire par exemple. Si vous ne connaissez pas ViM, rendez vous sur cette page.

Remarque: la plupart des opérateurs acceptent une sélection ou un mouvement en préfixe, et le nombre de fois qu'ils doivent s'exécuter en suffixe. Par exemple 3dtg va s'exécuter trois fois pour supprimer à chaque fois jusqu'au prochain caractère « g » de la ligne courante.

Remarque: certaines commandes acceptent un intervalle en préfixe. Par exemple :12,42s/toto/titi/ va s'exécuter de la ligne 12 à la ligne 42 pour remplacer à chaque fois la première occurrence de « toto » par « titi ».

Note: <n> représente un nombre et <s> représente un caractère. Les deux sont souvent optionnels.

Commande Alternative Explication
k Se déplacer vers le haut
j Se déplacer vers le bas
h Se déplacer vers la gauche
l Se déplacer vers la droite


Note: les touches fléchées marchent aussi, mais pas forcément si vous êtes connecté à un PC distant qui n'a pas la même configuration clavier que vous.

Les sélections

Commande Alternative Explication
aw Un mot
as Une phrase (sentence)
ap Un paragraphe
a(, a[, a<, a{ Un bloc délimité
a", a', a` Un bloc encadré de guillemets
at Une balise (tag) à la XML

Le a (aw, a word) peut être remplacé par un i (iw, inner word) pour ne pas prendre en compte les délimiteurs (dans le cas d'un mot, l'espace qui le suit).

Les mouvements

Commande Alternative Explication
$ Aller en fin de ligne
0 Aller en début de ligne
^ Aller au premier caractère qui n'est pas un espace ou une tab de la ligne
gg Aller en début de document
G Aller en fin de document
:<n> Aller à la ligne <n> (où <n> est un nombre entier)
f<s> Jusqu'au caractère <s> en allant vers l'avant
F<s> Jusqu'au caractère <s> en allant vers l'arrière
t<s> Jusqu'au caractère <s> en allant vers l'avant et en s'arrêtant juste avant
T<s> Jusqu'au caractère <s> en allant vers l'arrière et en s'arrêtant juste avant


Les intervalles

Commande Alternative Explication
<n> La ligne n
. La ligne courante
% Toutes les lignes du fichier
/<motif>/ La prochaine ligne vérifiant le motif
$ Dernière ligne
<spec1>,<spec2> De la spécification de ligne 1 à la spécification de ligne 2

Les modes

Commande Alternative Explication
i Entre en mode insertion au niveau du curseur
a li Entre en mode insertion après le curseur
A $a Entre en mode insertion sur le dernier caractère
o A<Entrée> Insère une ligne vide sous le curseur, place le curseur sur cette ligne, et entre en mode édition
O Idem mais une ligne au dessus du curseur
v Entre en mode visuel
V Entre en mode visuel par ligne
<C-v> Entre en mode visuel par bloc
R Entre en mode remplacement
<Echap> <C-c> Entre en mode normal
: Entre en mode commande (vous devez être en mode normal)
<C-o> En mode insertion, retourne en mode normal pour une seule commande, puis retourne en mode insertion juste après


Pour quitter le mode visuel, vous devrez appuyer deux fois sur une touche de changement de mode, par exemple deux fois sur la touche <Echap> ou i.

Suppression

Commande Alternative Explication
x Le caractère sous le curseur
s Comme x mais entre en mode insertion après
dd La ligne sous le curseur
dw Le mot sous le curseur
d$ D Supprime jusqu'à la fin de la ligne
d<mouvement> Du curseur à la cible du déplacement
d<sélection> La sélection précisée
c Se comporte comme d mais entre en mode insertion après la suppression
u Annulation de la dernière action
CTRL+R Remettre (annuler l'annulation)

Note 1: <mouvement> est un objet, comme par exemple G qui signifie la fin du document, gg le début, ↑ la ligne d'au-dessus, etc.

Note 2: <sélection> est un objet, comme par exemple aw qui signifie un mot, ap un paragraphe, etc.

Note 3: Bien entendu, d (et c) accepte un nombre pour agir de manière répétitive, par exemple 5dd supprimera 5 lignes.

Recherche

Commande Alternative Explication
/<s> Recherche vers le bas la chaîne de caractères, supporte les regex
?<s> Recherche vers le haut la chaîne de caractères, supporte les regex
n Passe à l'élément suivant correspondant à la chaîne de caractères recherchée
N Passe à l'élément précédent correspondant à la chaîne de caractères recherchée
* Cherche l'occurrence suivante du mot sous le curseur
# Cherche l'occurrence précédente du mot sous le curseur

Remplacement

Le caractère sous le curseur r puis le caractère que l'on veut mettre. Exemple: sur le mot "lepin", se positionner sur le "e", puis faire un ra remplacera le "e" par un "a".

Entrer en mode remplacement: <Insert><Insert> (double appui sur la touche <Insert>) vous permettra d'entrer en mode remplacement, c'est à dire que le texte que vous saisirez remplacera ce qu'il y a en dessous du curseur. La touche R permet également de le faire.

Copier

On copie généralement avec y, mais il faut savoir que tout ce qui est supprimé est enregistré dans le presse-papier. Un simple x ou d70d enregistrera la suppression.

On utilise ensuite p pour coller après le curseur, et P pour coller avant.

y se comporte de manière très similaire à d (ou c).

Commande Alternative Explication
yy Y Copie une ligne
yw Copie un mot
y$ Copie du curseur à la fin de la ligne
ygg Copie du curseur au début du document
y<mouvement> Copier jusqu'à la cible du mouvement
y<sélection> Copier la sélection précisée
p Coller

Sauvegarde

Commande Alternative Explication
:w Sauvegarder
:q Quitter
:q! Quitter sans enregistrer
:wq :x Quitter et enregistrer
:saveas Enregistre désormais le fichier sous ce nom
:up :update Enregistre le buffer courant si il a été modifié.

Pour les codeurs

Commande Alternative Explication
== Réindente la ligne sous le curseur
gg=G Réindente tout le document
=i{ =a{ Réindente tout le bloc courant, accolades exclues (inner-bloc) ou inclues (a)
K Va essayer de trouver la documentation correspondant au mot sous le curseur


Très pratique si vous avez de très mauvais profs qui vous filent du code pas indenté, ou tout simplement si vous virez des lignes de code. Attention : quelques problèmes avec PHP.

En mode insertion

Vim possède également un grand nombre de commandes en mode insertion, elles sont cependant bien moins connues.

Commande Alternative Explication
<C-y> Recopie le caractère qui est à l'emplacement du caractère à la ligne du dessus
<C-j> Ajoute un \n

Suppression

Commande Alternative Explication
J Joint la ligne courante avec la suivante
<C-a> Incrémente le nombre en dessous du curseur
<C-x> Décrémente le nombre en dessous du curseur

Les commandes avancées de Vim

Split

Commande Alternative Explication
:vsp :vsplit Splite verticalement
:sp :split Splite horizontalement

Avant toute commande, il faudra faire CTRL+W.

Commande Alternative Explication
CTRL+W Va au viewport suivant (faire deux fois CTRL+W)
CTRL+<direction> <direction> représente les touches de déplacement h, j, k ou l. Permet d'aller au viewport de gauche, dessous, haut, ou droite
+ Agrandit le viewport où se situe le curseur (on peut préciser une taille avant le "+")
l Réduit le viewport actuel
= Égalise la taille des viewports
r Echange les viewports
R Idem en sens inverse
q Ferme le viewport actuel

Buffers

Commande Alternative Explication
:b <nom du fichier> Edite le <fichier> présent dans le buffer (utilisez la touche tab !)
:b <n> Edite le fichier <n> du buffer
:sb <fichier/n> Similaire à :b mais effectue un split
:bn :bnext Buffer suivant
:bp :bprevious Buffer précédent
:e <fichier> Ouvre <fichier> dans un nouveau buffer
:ls Affiche l'ensemble des buffers ouverts

Onglets

Commande Alternative Explication
:tabnew <fichier> Créer un nouvel onglet
:tabnext gt Aller à l'onget suivant
:tabprevious gT Aller à l'onget précedent
:tabclose Ferme l'onglet actuel


Note: <fichier> n'est pas obligatoire, sans <fichier> ouvre un onglet vide.

Pour plus d'informations sur les onglets :help tabe.

Remplacements

Commande Alternative Explication
:<intervalle>s/<ancien>/<nouveau>/<options> :su :substitute Remplace <ancien> par <nouveau>
:g/<string>/d Supprime toutes les lignes qui contiennent <string>
:v/<string>/d Supprime toutes les lignes qui ne contiennent pas <string>

Ce sont des commandes complexes et puissantes qui acceptent des expressions régulières. Elle sont souvent équivalentes à celles de sed ou ed. Si aucun intervalle n'est indiquée à :s, elle s'applique sur la ligne courante. Les options le plus souvent utilisées sont:

  • g pour appliquer le remplacement à tous les <ancien> et pas seulement au premier
  • c pour demander une confirmation avant d'effectuer le remplacement
  • i pour ne pas tenir compte de la casse

Shell

Commande Alternative Explication
:!<commande> Envoie la <commande> dans votre shell bash/zsh/dos/etc ...
:r !<commande> Ecrit le résultat de la <commande> sous votre curseur (essayez un :r !ls)

Actions sur le texte

Commande Alternative Explication
< Enlève un alinéa sur la ligne courante
<G Enlève un alinéa jusqu'à la fin du document
<n< n<< Enlève un alinéa sur n lignes
> Ajoute un alinéa sur la ligne courante (>G et >n> fonctionnent)
:[plage]move <n> :m Déplace les lignes de la page à l'endroit indiqué (<n>)
:[plage]change <n> :c Comme :m sauf que cela les copie
:vmap tv !perltidy -ce -q <CR> Permet de réindeter les lignes sélectionnées. Il faudra avoir perltidy d'installé

Divers

Commande Alternative Explication
g?<sélection>, g?<mouvement> Convertit le texte correspondant à la sélection ou jusqu'à la cible du mouvement en (fr) rot13
CTRL+a Incrémente le nombre sous le curseur
CTRL+x Décrémente le nombre sous le curseur
~ Inverse la casse de la lettre sous le curseur
Vu Minimise la casse de la ligne (V peut être remplacé par v)
VU Maximise la casse de la ligne
:e . :browse e Ouvre un navigateur de fichiers
:Sex Splite l'écran et ouvre le navigateur de fichier (oui je l'ai mis uniquement parce que la commande c'est Sex)
gf Ouvre le fichier dont le nom est sous le curseur
:%!fmt Aligne tout le texte
:ab <abrévation> <mot> Définit une abréviation pour un mot, le remplacement sera automatique si un espace suit l'abréviation dans le mode insertion

Voir aussi