Je sais, je ne devrais pas, mais ça me démange de commencer par ceci :
comment, en mode normal, permuter le caractère actuel avec le suivant
? En tapant xp
. ça ne s'invente pas.
Mais qu'auriez-vous pensé de moi si j'avais expliqué comment remonter de deux lignes sans utiliser ni les flèches de déplacement, ni les chiffres ?
Ceci posé, voici les quelques petits trucs qui rendent bien service dans Vim et dont le moins que l'on puisse dire est qu'on ne les voit pas au détour de chaque doc pas plus qu'on ne les trouve facilement dans l'aide intégrée à Vim.
:E
permet d'ouvrir un semblant d'explorateur de
fichiers. En mode texte certes, mais qui permet de naviguer à vue et qui
offre une alternative satisfaisante au complètement des noms de fichiers. Une
fois le curseur sur l'élément souhaité, fichier ou dossier, on l'ouvre par la
touche Entrée. Pour aller plus vite encore, taper directement :E chemin/vers/dossier/voulu
. Le complètement des
chemins à l'aide de la touche TAB est possible, un peu comme en console.
Une fois dans l'explorateur, on peut utiliser toutes les commandes de
déplacement habituelles de Vim pour atteindre l'élément voulu, en
particulier les fonctions de recherche (commandes /
ou ?
pour chercher en
avant ou en arriére ; n
ou N
pour poursuivre la recherche dans le même sens ou
en sens contraire).
Par :help :E
, il n'est pas impossible que vous trouviez des variantes de :E
plus intéressantes pour vous ou même des astuces pour sélectionner plus effficacement les fichiers à ouvrir.
Dans la majorité des Unix, on dispose de la commande grep :
$ grep mot_clé *.tex
cherchera la chaîne de caractères mot_clé
dans tous les
fichiers .tex
du dossier actuel.
On peut en faire autant sans quitter Vim : il suffit pour cela de taper
:grep mot_clé *.tex
pour faire sa recherche.
:cd chemin/vers/dossier
(cd
:
change directory ; le complètement des noms de dossiers est
possible comme en console, avec la touche TAB).
:cd %:h
permettra d'aller, si ce n'est pas encore le cas, au dossier du fichier en cours d'édition. Utile quand on lance gVim à partir d'un navigateur de fichiers qui ne lui communique pas le chemin absolu du fichier.
:pwd
(print working directory).
gf
(en mode normal, évidemment).
Ctrl W suivi de f
permet d'en faire autant mais en scindant le fenêtre actuelle.
/
et ?
suivis du mot à
chercher permettent de chercher en avant et en arriére respectivement.
n
permet alors de continuer la recherche dans
le même sens et N
dans le sens contraire.
*
permet de chercher en avant le mot sous le
curseur et #
en arriére.
Vous aviez cherché le mot éprotostichophobieé mais depuis vous avez effectué dix autres recherches ? Et bien sûr, vos aimeriez éviter de retaper ce long mot ? Pas de problème : commencez une recherche sur le début du mot : /proto
puis utilisez la touche Flèche haut. Vous verrez défiler sous vos yeux émerveillés toutes les recherches précédentes commenéant ainsi.
Naturellement, si vous tapez simplement le commande de recherche /
puis tout de suite la touche Flèche haut, vous revoyez simplement toutes les recherches précédentes. Évidemment encore, Flèche bas pour revenir vers les plus récentes.
En mode commande, :s/avant/après/
permet de
remplacer la première apparition de çavanté par çaprèsé sur la ligne
actuelle ; :s/avant/après/g
permet de remplacer
chaque apparition sur la ligne en question.
:37,74s/avant/après/
et :37,74s/avant/après/g
réalisent les mêmes actions de
la ligne 37 à 74. Indiquez :%s/avant/après/g
pour traiter l'intégralité du fichier.
Dans un fichier LaTeX, oé, rappelons-le, un bloc de code se commente par
le symbole %
placé au début de chaque ligne, on peut
commenter tout un bloc de texte préalablement sélectionné à la souris ou
en mode visuel par :s/^/%/
, le symbole
^
signifiant édébut de ligneé. Et de même, on peut
décommenter par :s/%//
.
Pour les languages ou la mise en commentaire se fait par une balise double (une ouvrante, une fermante), c'est évidemment plus simple...
Toujours en LaTeX, où un saut de ligne est obtenu par \\
,
il est possible d'en rajouter pour les lignes 19 à 54 en tapant :19,54s/$/\\\\/
, $
signifiant éfin de
ligneé. Au sujet des antislashes, deux seulement seront effectivement
rajoutés : dans cette syntaxe, l'antislash sert à empécher
l'interprétation des caractères spéciaux... dont l'antislash fait
lui-même partie.
Pour supprimer les lignes vides du fichier complet ou entre les lignes
19 et 54 : :%/^$/d
ou :19,54/^$/d
.
diw
ou ciw
avec le curseur sur le mot à supprimer. À partir du mode normal, évidemment ! Sinon vous écrivez diw ou ciw. Futé, non ?
Pour plus de détails : :help text-objects
.
Pour effacer depuis le curseur jusqu'au prochain caractère "
(non-inclus), tapez dt"
; pour effacer aussi ce caractère : df"
. Valable a priori pour tout caractère ou lettre.
Dans les fichiers en texte brut, il arrive que l'ajout de texte au milieu d'une ligne par exemple, perturbe quelque peu les options de formatage choisies auparavant et Dieu^WLinus sait si elles sont nombreuses. Donc, pour retrouver le formatage prévu, sélectionner le texte voulu puis taper gq
. Naturellement, gq
suivi d'une commande de déplacement quelconque formatera le texte parcouru.
Autre chose, pour joindre une ligne et la suivante (former une seule ligne avec
elles, autrement dit, ou encore supprimer le prochain saut de ligne), utiliser
J
(majuscule, attention !).
Fonctionne aussi en multiple (11J
joindra 11 fois) et
en sélection.
Des connaissances basiques de Vim vous permettent de copier le mot
suivant par yw
, le précédent par yb
, la ligne actuelle par yy
, la ligne actuelle plus les 36 suivantes par 37yy
. Un simple y
vous
permet de copier une sélection effectuée à la souris ou en mode visuel
(v
à partir du mode normal). Et 2dd
de couper la ligne actuelle et la suivante.
On peut multiplier indéfiniment les exemples, mais quoi que vous ayez
copié ou coupé (chaque coupe fait aussi une copie), un certain nombre de
registres contiennent les copies effectuées récemment. Pour lister les
registres actuels, tapez :reg
.
Il existe différents types de registres :
Consultez l'aide pour tous les détails :h registers
.
Il faut d'abord appeler le registre par sa lettre, par exemple "k
pour le registre k
. On taperait alors
:
"kyy
pour mémoriser le texte de la ligne
actuelle dans le registre k
,
"k37yy
pour mémoriser le texte de la ligne
actuelle et des 36 suivantes dans le registre k
,
"k3w
pour mémoriser le texte des trois mots
suivants dans le registre k
,
:19,54d k
(n'oubliez pas l'espace entre
d
et le nom du registre) pour effacer les lignes 19 à
54 et les mémoriser dans le registre k
. Noter que cette
façon de définir le registre différe des précédentes,
Ne pas oublier : si un registre est défini par une lettre minuscule, son contenu est remplacé ; si la lettre est majuscule, son contenu éventuel est complété !
Pour coller le registre k
après le curseur, "kp
. Autres commandes de collage utilisables,
évidemment...
Une suite de commandes, si elle est assez généraliste pour étre
appliquée avec les effets souhaités en plusieurs endroits du texte, peut
être enregistrée dans un des registres de a
à
z
ou de A
à Z
. Au passage, c'est pour cela que Vim appelle cela des registres : on y trouver aussi bien des éléments copiés/collés ou des macros.
Pour enregistrer sa macro dans le registre k
:
qk
,
q
.
Pour exécuter la macro du registre k
: @k
; pour l'exécuter 111 fois : 111@k
, comme d'habitude dans Vim.
Ctrl A : permet d'incrémenter le nombre sous le curseur. Ctrl X : permet de décrémenter le nombre sous le curseur.
148 suivi de l'un des deux raccourcis permet d'additionner ou de soustraire 148 directement. Ceci marche aussi avec des négatifs, des écritures hexadécimales, etc...
Tapez simplement :help 42
. Accessoirement, ceci
nous rappelle que l'aide est accessible par :help
ou :help mot_clé
.