La première chose à savoir sur Vim, c'est qu'il existe plusieurs modes avec lesquels vous allez régulièrement permuter.
Chaque mode possède un rôle différent. Il est important de comprendre comment fonctionnent les modes pour pouvoir utiliser Vim correctement.
Nous utiliserons principalement 3 modes : le mode normal, le mode insertion et le mode visuel.
i
' afin d'éditer un texte sans raccourcis.v
', il permet de modifier une sélection.Le mode dans lequel nous nous trouvons est indiqué en bas à gauche de l'écran. Si vous êtes en mode insertion, vous devriez voir -- INSERT --
en bas à gauche de l'écran.
Le mode visuel sera affiché de la même manière, avec -- VISUAL --
.
Vous pouvez toujours revenir au mode normal
en pressant la touche echap
.
Téléchargez maintenant le fichier exemple cigale-et-la-fourmi.txt
ici.
Pour l'ouvrir avec Vim, tapez vim cigale-et-la-fourmi.txt
dans votre terminal ou tapez vim
puis écrivez :edit cigale-et-la-fourmi.txt
.
À l'origine, les touches directionnelles n'existaient pas. Pour se déplacer dans le texte, il fallait utiliser les touches h
, j
, k
et l
pour se déplacer respectivement à gauche, en bas, en haut et à droite.
Vim a gardé cette logique, mais il est (heureusement) possible d'utiliser les touches directionnelles pour se déplacer.
Dans le fichier cigale-et-la-fourmi.txt
, placez votre curseur sur la première ligne du texte, entrez en mode insertion en pressant i
et écrivez La Cigale et la Fourmi
puis appuyez sur echap
pour revenir en mode normal. L'objectif est d'ajouter le titre en début de fichier.
Simple ? Une fois de retour en mode normal, enregistrez le fichier en pressant :w
puis entrée
.
Pour quitter vim, :q
puis entrée
.
Pour enregistrer et quitter, combinez les deux raccourcis précédents : :wq
puis entrée
.
Bien que le mode insertion permette d'ajouter/supprimer du texte. Nous n'allons pas basculer en insertion à chaque fois que nous voulons supprimer une section, ce serait overkill.
Nous allons alors apprendre quelques raccourcis du mode normal pour nous éviter de constamment changer de mode.
Les deux principales manières de supprimer du texte sont x
et d
:
x
supprime le caractère sous le curseur.d
supprime une chaine de caractères définie par un paramètre.Il est également possible de répéter une action en ajoutant un nombre avant la commande. Par exemple, 5x
supprimera les 5 caractères suivants le curseur.
Mais avant d'apprendre à supprimer via d
. Nous allons d'abord apprendre à nous déplacer de manière efficace.
En mode normal, en pressant 0
ou ^
, le curseur se positionne en début de ligne.
gg
, au début du fichier.G
, à la fin du fichier.w
, au début du prochain mot.e
, à la fin du mot actuel/suivant.b
, au début du mot précédent/actuel .:10
ou 10G
, à la ligne 10.Ces mêmes commandes peuvent servir de paramètre, comme pour l'action d
(delete).
Essayez alors de supprimer des mots via dw
, de
et db
.
Idem, pour des lignes entières : d$
, d0
, ou dd
l'instruction d
est également disponible en tant que commande (commençant par :
). Pour d
la syntaxe est :[debut],[fin]d
.
Exemple :
:5,10d
va tout supprimer entre les lignes 5 et 10.À retenir qu'il existe certains caractères spéciaux pour définir le début et la fin :
.
→ la ligne du curseur$
→ la dernière ligne%
→ toutes les lignesSi vous voulez annuler une action, utilisez u
(undo).
Désormais, vous savez vous déplacer, supprimer des blocs et refaire une action.
Comme exercice, ouvrez de nouveau la-cigale-et-la-fourmi.txt
,
Rappel: Une répétition est un chiffre X à mettre devant une commande pour qu'elle se répète X fois.
D'autres macros/actions en vrac :
r
→ remplace le caractère sous le curseura
→ entre en mode insertion après le curseur:.,$-3d
→ supprime toutes les lignes entre la ligne du curseur et les 3 dernières lignes du fichiero
→ entre en mode insertion en créant une nouvelle ligneO
→ entre en mode insertion en créant une nouvelle ligne au-dessusdG
→ supprime toutes les lignes du curseur à la fin du fichierdgg
→ supprime toutes les lignes du curseur au début du fichierLe mode visuel est le seul que nous n'avons pas encore abordé. Il permet de sélectionner du texte et d'y appliquer une macro.
En mode normal, appuyez sur v
pour entrer en mode visuel. Vous pouvez alors vous déplacer avec les touches directionnelles pour sélectionner du texte.
Une fois le texte sélectionné, vous pouvez appliquer une macro comme d
pour le couper.
Car oui, je vous ai menti ! d
ne permet pas de supprimer mais de couper. La différence est que le texte coupé est stocké dans un presse-papier (clipboard).
C'est l'équivalent total d'un ctrl+x
.
En supprimant du texte, il est possible de le coller avec p
(paste) ou P
pour le coller avant le curseur.
Comme vu dans la précédente animation, il est possible de continuer à utiliser les raccourcis de déplacement en mode visuel.
Vous pouvez aussi directement sélectionner la ligne entière avec V
.
Pour copier une sélection, utilisez y
(yank).
Le clipboard de Vim est utilisable entre différents fichiers. C'est-à-dire que vous pouvez copier du texte dans un fichier, puis le coller dans un autre fichier.
Vim intègre une manière simple de faire des recherches : /
et ?
dont la seule différence est la direction de la recherche (vers le bas ou vers le haut).
Ces actions prennent en paramètre une regex (expression régulière).
À retenir :
/
→ recherche vers le bas?
→ recherche vers le hautn
→ recherche le prochain résultatN
→ recherche le résultat précédentVous pouvez surligner les résultats avec la commande :set hlsearch
Sed est un outil en ligne de commande permettant de modifier du texte. Il est très utilisé dans les scripts de déploiement pour modifier des fichiers de configuration. Celui-ci est intégré nativement à Vim avec la commande s
.
En bash : sed -i 's/old/new/g' file.txt
Sur Vim : :[debut],[fin]s/old/new/g
Comme pour :d
, :s
est une commande qui prend en paramètre un début et une fin. Le début et la fin peuvent être des lignes ou des caractères spéciaux comme .
ou %
.
Simple remplacement de texte : Cigale par Bestiole avec :1,2s/Cigale/Bestiole/
.
v
→ entrer en mode visuel'<, '>s/^/#/
→ ajouter un #
au début de chaque ligne sélectionnée Vim va préremplir les balises du mode visuel '<, '>
.
D'autres raccourcis en mode visuel:
gv
→ réappliquer la dernière sélection visuelleo
→ se placer au début/fin de la sélectionu
et U
→ Lowercase/uppercase~
→ inverser la case>
et <
→ Ajouter/supprimer l'indentationUn buffer est un fichier chargé en mémoire. Un fichier ouvert dans Vim est alors un buffer (qu'il soit affiché à l'écran… ou non).
Lorsque nous ouvrons un fichier, celui-ci est chargé dans un buffer. Si nous ouvrons un autre fichier, celui-ci sera chargé dans un second buffer. Nous pouvons alors naviguer entre les fichiers ouverts assez facilement.
Voici quelques commandes utiles pour gérer les buffers :
:ls
→ lister les buffers ouverts:b{i}
→ ouvrir le buffer {i}:bnext
ou :bn
→ ouvrir le buffer suivant:bprevious
ou :bp
→ ouvrir le buffer précédent:bdelete
ou :bd
→ ferme le buffer courantMaintenant que nous savons manipuler les buffers, nous pouvons les utiliser pour rendre leurs usages plus efficaces avec les onglets ou le multifenêtrage.
Ce n'est pas très utilisé mais Vim permet aussi de gérer des onglets afin de travailler sur plusieurs fichiers en même temps. La syntaxe pour ouvrir directement de nombreux fichiers en une seule commande est alors la suivante : vim -p file1 file2 file3
.
Voici les principales choses à retenir:
:tabe
→ ouvrer un nouveau fichier dans un nouvel ongletgt
→ passer à l'onglet suivantgT
→ passer à l'onglet précédent{i}gt
→ passer à l'onglet {i}:qa
→ fermer tous les ongletsMaintenant, on s'attaque à l'affichage de plusieurs buffers en même temps avec le multifenêtrage.
:split fichier
ou :sp
→ ajouter une fenetre horizontale en ouvrant 'fichier':vsplit fichier
ou :vsp
→ ajouter une fenetre verticale en ouvrant 'fichier'ctrl-w fleche-haut
→ se déplacer vers le hautctrl-w ctrl-w
→ se déplacer vers la fenêtre suivante:resize 10
→ redimensionner la fenêtre courante à 10 lignes:vertical resize 10
→ redimensionner la fenêtre courante à 10 colonnes:sview
→ ouvrir en lecture seule:hide
→ fermer la fenêtre courante:only
→ fermer toutes les fenêtres sauf la fenêtre couranteLorsque nous manipulons un fichier volumineux, nous allons régulièrement faire des d
(couper) et des p
(coller).
Certaines suppressions avec d
n'auront pour objectif que de supprimer un bloc de texte, sans volonté de l'enregistrer dans notre presse-papier.
Pourtant Vim va l'enregistrer dans le presse papier et nous allons perdre le contenu qui aurait dû être collé par p
(ou P
) avant la suppression.
À ce problème, nous avons la solution d'utiliser les registres.
Lorsque vous supprimez un bloc, Vim va automatiquement l'ajouter à un registre qui peut retenir jusqu'à 9 blocs.
D'autres éléments sont également déjà présents dans le registre en readonly :
"%
correspond au nom du fichier en cours d'édition":
est la dernière commande exécutée".
affiche la dernière chaine de texte ajoutée"/
correspond à la dernière recherche (sed inclus)"*
correspond au clipboard clic-molette"+
correspond au clipboard système"#
correspond au dernier fichier ouvert (sur la même session) Vous pouvez voir le contenu de votre registre via la commande :reg
À présent, vous pouvez également ajouter un élément au registre afin qu'il ne soit pas supprimé. Si les clés 0-9 et %:/*+#
sont en lecture seule, il vous reste néanmoins toutes les clés alphabétiques.
Chaque commande concernant le registre commence par "
(doubles-quotes). Pour coller la clé 9, la commande est : "9p
(p
pour coller)
Pour enregistrer une clé dans le registre : "ayy
(yy
pour copier la ligne)
Évidemment : p
et yy
ne sont pas les seules manières de coller/copier le contenu d'une clé. Les commandes valables dans les précédents cas d'usages sont toujours valides et utilisables dans ce contexte.
N'hésitez pas à me contacter pour toute question, remarque ou suggestion !
transition: cover
transition: fade
Source : https://null-byte.wonderhowto.com/how-to/intro-vim-unix-text-editor-every-hacker-should-be-familiar-with-0174674/
transition: explode
transition: fade
Source : https://www.freecodecamp.org/news/learn-linux-vim-basic-features-19134461ab85/