Howto vim
TL;DR1 vim c'est bien
La première impression lorsque l'on commence avec vim c'est qu'il est difficile à prendre en main. Ce n'est pas faux !
— Comment générer une chaine aléatoire ?
— Demander à un étudiant qui débute avec vim de quitter !
Si j'ai bien vite saisi le « coup des 3 modes », il m'a fallu du temps pour découvrir l'usage des onglets (tabs) par exemple. Cet éditeur est tellement riche qu'il demande un certain temps d'apprentissage. Une fois que l'on a pris le temps de l'appréhender, ça va mieux !
Même si un programmeur va utiliser un IDE pour développer du code, il devra cependant bien connaitre son éditeur de texte.
IDE et éditeur de texte sont deux outils incontournables de l'informaticien.
Juste Leblanc
Commençons donc par énoncer sa philosophie afin de l'appréhender beaucoup plus
facilement. Je ne reviens sur ses 3 modes; mode normal
, mode édition
et
mode commande
que pour dire que le mode normal
est, par définition, le mode dans
lequel l'on se trouve le plus souvent possible.
Le passage en mode insertion
se fait uniquement lorsque l'on veut insérer du
texte !
Les commandes vim peuvent être vues comme des appels de fonction ou simplement comme pouvant être combinées un peu comme un nom suivi d'un verbe (les compléments viendront ensuite).
d signifie delete
e signifie aller jusqu'à la fin du mot
→ de signifie effacer jusqu'à la fin du mot
c signifie change
i signifie inside (un peu comme un adjectif)
( signifie parenthesis
→ ci( signifie remplacer le contenu des parenthèses
De plus . permet de répéter la dernière commande d'édition (complète, pas un mouvement).
Si j'entre la commande Afoo<ESC>
, j'insère en fin de ligne les trois
caractères foo (le <ESC>
me permettant de repasser en mode normal).
Si ensuite j'entre la commande ., n'importe où sur une
autre ligne, ça aura le même effet. Un chouette exemple chez viEmu de la
merveilleuse commande . qu'il faut prendre la peine de lire.
Quelques options de base
Sans être exhaustif (ce n'est pas le but), je partage quelques options qui ne sont pas self-compréhensible.
set ignorecase
set smartcase
Cette combinaison rend la recherche plus efficace.
Pour faire une recherche, il suffit d'entrer un pattern (le mot que l'on
cherche) après le caractère /
. Si ce pattern est écrit en minuscules, la
recherche ne sera pas sensible à la casse. Si, par contre, le pattern contient
des minuscules et des majuscules alors la recherche sera sensible à la casse.
vim autorise l'utilisation des regex (expressions régulières) dans ses recherches. Les deux options suivantes permettent une meilleure prise en charge des expressions régulières (d'après Losh).
nnoremap / /\v
vnoremap / /\v
Par défaut, lorsque l'on fait un substitute (:s/un/deux/
),
c'est la première occurrence qui est changée … alors que en général,
on veut les changer toutes → gdefault
— Il faut couper les lignes à 80 caractères !
— Ça c'est encore un truc de vieux peys !
Je n'argumenterai pas sur l'usage en informatique (du moins une certaine informatique) de couper les lignes à 80 caractères. Que l'on veuille le faire ou pas, je conseille de jeter un œil sur l'aide de vim au sujet du wrapping ou
L'art de découper son texte !
L'aide de vim s'obtient par la commande help
,
:help fo-table
Dès que vous avez lu, vous pouvez choisir les options qui vous plaisent pour les paramètres suivant. Pour ma part, je choisis (aujourd'hui):
set wrap
set textwidth=80
set colorcolumn=82
set formatoptions=qrn1j
leader key
Le deuxième usage non basique que propose vim est de donner un clavier complet
à l'utilisateur afin qu'il puisse le paramétrer comme il l'entend ! C'est
l'utilisation de la « leader key ». Par défaut toute combinaison de touches
après la touche \
aura l'effet défini par l'utilisateur.
Par exemple si l'on a l'habitude de souligner une ligne d'autant de caractères
=
que de lettres dans la ligne (certains utilisateurs de la syntaxe markdown
font comme ça), on peut;
- faire une copie de la ligne (yy) et la coller (p);
- sélectionner toute la ligne (V);
- remplacer tous les caractères sélectionnés par
=
(r=)
La touche leader me permet d'y associer le raccourci 1 par exemple:
(nnoremap
permet de redéfinir une (combinaison) de touches en mode normal,
inoremap
pour le mode insert et vnoremap
pour le mode visuel)
nnoremap <leader>1 yypVr=
Comme je lis et conçois assez bien que la touche \
n'est pas le meilleur
choix, je tente d'utiliser la touche ,
pour ce faire.
let mapleader=","
L'avantage de cette fonctionnalité c'est de pouvoir ajouter un maximum de raccourcis … l'inconvénient, c'est qu'il faudra les retenir …
Dictionnaire et correcteur orthographique
Si vous êtes comme moi, vous aimez bien écrire sans fautes mais vous n'avez pas la meilleure orthographe qu'il soit. Un coup de
spell spelllang=fr
et vous signalez à vim de rendre le dictionnaire français disponible. Si vous ne l'avez pas, il le téléchargera pour vous.
Pour demander la liste des mots corrects, c'est z=
sur le mot en question et
pour parcourir le fichier en s'arrêtant sur les mots fautifs, c'est ]s
. Pour
ajouter un mot au dictionnaire local, c'est zg
.
Personnellement, il m'arrive d'écrire un anglais … j'ajoute alors à mon .vimrc
la possibilité de passer d'un dictionnaire à l'autre … et éventuellement de
désactiver cette correction orthographique lorsqu'elle me parrait inutile.
" switch / toggle dictionary
nnoremap <leader>ts :set spell!<cr>
nnoremap <leader>sfr :set spelllang=fr<cr>
nnoremap <leader>sen :set spelllang=en<cr>
TODO Chercher un dictionnaire en nouvelle orthographe.
Mouvements
Pour se déplacer, les flèches (semblent) fonctionnent très bien. Alors, pourquoi s'embarrasser des touches hjkl si ce n'est parce qu'elles m'évitent de déplacer ma main2.
Simplement pour se rappeler que d'autres mouvements sont possibles:
f
suivi d'un caractère pour m'emmener à la prochaine occurrence de celui-ci;%
permet de trouver la parenthèse (ou accolade ou crochet ou …) fermante correspondant à la première parenthèse (ou accolade ou … ) ouvrante trouvée … même si elles sont imbriquées;H
,M
etL
nous emmène directement en Haut de l'écran, au Milieu ou en bas (Lowest);zt
,zz
etzb
ne changent pas la position du curseur mais scrollent la vue pour que le curseur se retrouve en haut, au milieu ou en bas de l'écran;*
se place sur la prochaine occurrence du mot se trouvant sous le curseur;
Scinder sa fenêtre en plusieurs fenêtres (split)
vim permet de scinder (split) la fenêtre en deux fenêtres ce qui permet de parcourir deux fichiers en parallèle … fonctionnalité très pratique. Je ne parle que des split verticaux, car je ne vois pas l'utilité d'un split horizontal.
Attention de bien distinguer les notions de fenêtre (window) et d'onglet (tab).
L'aide de vim me dit que je peux ouvrir une nouvelle fenêtre à l'aide de
:vne[w]
. J'ajoute donc un raccourci vers cette fonctionnalité.
nnoremap <leader>sn :vne<cr>
Parfois, il est utile d'ouvrir une nouvelle fenêtre contenant le même fichier.
C'est la commande :vsp[lit]
. Dans ce cas, il faudra parfois passer d'une
fenêtre à l'autre … et là , ça devient ch#+@t car il faut passer par les
commandes vim à coups de [Ctrl]. C'est également à ce moment que l'on repense
aux commandes de mouvements jklm.
nnoremap <leader>s :vsp<cr>
nnoremap <leader>sl <C-w>l
nnoremap <leader>sr <C-w>m
Plugins
vim peut se munir d'une série de plugins.
Jusqu'à présent, j'utilisais peu cette fonctionnalité mais j'ai vu, au hasard du web, un screenshot présentant un petit split à gauche listant les répertoires du répertoire courant … j'aime bien ça3 !
Pour ça, il faut rendre l'utilisation des plugins simples avec le plugin
pathogen. Une fois installé, tous les autres plugins s'installeront
facilement dans le répertoire ~/.vim/bundle
.
plugin NerdTree
Le plugin NERDTree permet d'afficher l'arborescence des fichiers dans un petit split à gauche.
La doc m'explique comment permettre de l'afficher au lancement de vim et ma leader key me permet de le faire apparaitre / disparaitre à loisir.
autocmd vimenter * NERDTree
nnoremap <leader>tree :NERDTreeToggle<cr>
NERDTree permet de bookmarquer des fichiers dans le split, de partager le même split dans plusieurs onglets, …
À ce stade, il reste à lire mon fichier .vimrc
… et plein d'autres pour se
donner une idée des « options qui vont bien ».
Mon fichier .vimrc
(ainsi que d'autres fichiers de configuration) se trouve →
github.com/Pinkilla/dotfiles.
Liens
- Steve Losh, Comming home to vim
- Why, oh WHY, do those #?@! nutheads use vi?
- Graphical cheat sheet
- Correction orthographique et grammaticale avec vim
- How I boosted my vim
- Plugin NERDTree
- Plugin Pathogen
- SublimeText, l'éditeur à la mode ;-)
- Crédit photo chez DeviantArt par machiavellicro
À lire aussi
-
Too long; don't read signale que le billet n'est pas lu parce que trop long. J'en fait ici un résumé … très très résumé ;-) ↩
-
On parle bien d'un clavier azerty (ou qwerty) car sur un clavier bépo ça ne le fait pas trop. ↩
-
C'est un peu ça qui m'a donné l'envie d'essayer un peu SublimeText … mais ça faisait à nouveau des (autres) raccourcis à apprendre ! ↩