Linux : Améliorer votre productivité avec Vim

Partager cet article

Temps estimé pour la lecture de cet article : 62 min

Quel Linuxien ne connait pas Vim, ou Vi improved, qui est bien souvent en concurrence avec Emacs. Cet éditeur de texte, bien qu’assez complexe au premier abord, permet de coder de façon efficace, une fois que vous aurez pris le temps d’apprendre à l’utiliser.

Comment installer Vim sous Linux

Commençons par installer vim, pour ce faire rien de plus, ouvrez un terminal puis tapez:

sudo apt-get install vim 

Une fois installé, il suffit de lancer Vim depuis un terminal, on fait alors: vim filename, par exemple: vim main.c Il existe 3 modes différents :

  • Mode interactif : C’est le mode par défaut dans lequel vous serez. Dans ce mode, vous ne pouvez pas écrire de texte ! Il vous permet de lancer des raccourcis qu’on verra plus en détail plus tard.
  • Mode commande : Ce mode permet de lancer des commandes telles que quitter et enregistrer. Vous pouvez aussi l’utiliser pour activer des options de Vim (comme la coloration syntaxique), on va pouvoir également exécuté des commandes bash. Pour activer ce mode, vous devez être en mode interactif et appuyer sur « : ». Vous validez la commande avec la touche Entrée et revenez alors au mode interactif.
  • Mode insertion : Pour le lancer il suffit d’appuyer sur i quand on est en mode interactif, vous pourrez alors écrire du code. Pour en sortir, il faut appuyer sur la touche « Echap ».

Comment survire à Vim

Vim meme exit

Pour pouvoir enregistrer un fichier ouvert, il faut déjà passer en mode interactif si on ne l’est pas. On utilise la commande :w pour sauvegarder et :q pour quitter. Donc si on veut enregistrer et quitter un fichier, il suffit d’exécuter les deux commandes, en faisant simplement :wq. Si à contrario on veut quitter le fichier sans enregistrer les informations, on exécutera la commande :q!.

Les commandes de base à connaitre pour survire à Vim

Voici, un petit recueil à connaître :

  • dd, permet de couper une ligne. shift+d, de supprimer une ligne à partir d’un caractère jusqu’à la fin de la ligne.
  • Pour accéder rapidement a une ligne on peut faire :n, avec n le numéro de la ligne.
  • Pour placer le curseur au tout début d’une ligne, appuyez sur 0 en mode interactif. Pour aller en fin de ligne, appuyez sur la touche $.
  • yy : copier une ligne en mémoire, vous pouvez ensuite le coller avec la touche p (cela fonctionne avec le texte coupé avec dd)
  • Pour annuler vos dernière modifications, appuyez sur u (undo). Afind d’annuler vos 4 dernières modifications, appuyez sur 4u. Pour répéter un changement (= annuler une annulation), appuyez sur Ctrl + R.
  • Pour sauter à la dernière ligne, tapez simplement G, pour revenir à la première ligne, tapez gg.
  • Vim possède un système d’onglets, pour en ouvrir un, il faut faire :tabe + nomDuFichier.
  • Si vous avez plusieurs onglets d’ouverts et vous souhaiter tout fermer, vous pouvez enregistrer ce qu’on appelle une session. Vous faites :mks ce qui va créer un fichier Session.vim. Par la suite, il suffira de taper : vim -S et vous récupérerez la session.
  • La commande :r! permet d’insérer le résultat d’une commande directement dans le fichier ainsi on pourrait imaginer obtenir la date en tapant : r! date.
  • On peut ouvrir plusieurs fichiers avec Vim en une fois, en faisant vim -p *.c. De même si on veut fermer tous les fichiers d’un coup, on fait simplement :wqa. (enregistrer et fermer tous les fichiers)
  • Il est possible, d’indenter facilement tout un code, en se positionnant à la première ligne où à celle à partir de laquelle on veut indenter et on fait =G, le code va alors être indenter automatiquement

Fichier de configuration de Vim, où comment gagner en efficacité

Vim propose un fichier de configuration appelé .vimrc. Ce dernier nous permet d’activer certaines options pour Vim. Pour commencer, on peut créér un fichier vide à la racine de notre home.

touch ~/.vimrc

Maintenant que le fichier est dans votre dossier Home on peut l’ouvrir en tapant :

vim ~/.vimrc

Voici quelques options que l’on peut activer :

  • On va commencer par activer la coloration syntaxique. En fonction du type de fichier que vous ouvrez, Vim colorera le texte. Vim supporte un très très grand nombre de langages de programmation : C, C++, Python, Java… On écrit donc simplement, syntax on.
  • Il faut également activer les couleurs, ce qui est toujours assez utile, cela dépend du terminal, mais généralement on peut activer 256 couleurs, en faisant: set t_Co=256. Cette commande permet également l’utilisation d’un thème.
  • Afin de rendre plus lisible votre code, je vous recommande de mettre votre background (le fond de la console) en noir. set background=dark
  • Afficher les numéros de ligne : set number
  • On peut afficher la commande en cours. Lorsque vous écrivez une commande comme 1,2d pour supprimer 2 lignes, vous écrivez à l’aveugle. Vous ne voyez pas ce que vous avez écrit. Avec cette option vous pourrez voir ce que vous écrivez: set showcmd
  • Activer le support de la souris: set mouse=a Désormais, vous pourrez cliquer avec la souris sur une lettre pour y déplacer le curseur directement. Vous pourrez utiliser la molette de la souris pour vous déplacer dans le fichier.
  • L’indentation un vrai plus dans tout bon éditer de texte, pour l’activer rien de plus il faut ajouter: set ai et préciser la taille de l’indentation je vous conseille 4: set shiftwidth=4.

Coloration syntaxique selon un thème

Avec Vim, il est possible d’utiliser un thème, ce dernier, va alors colorer les mots clés selon nos préférences. Pour trouver plusieurs thèmes, google est notre ami. Ici je vais quand même vous en proposez deux que j’apprécie. Les colorschemes mustang et vitamin (que vous pouvez voir ci-dessous).

Mustang vim

Colorscheme mutsang

Vitamin vim

Colorscheme vitamin

Une fois télécharger, créer un dossier colors dans le dossier .vim (dans votre répertoire perso: /home/votrepseudo/.vim) et placez y le thème, il ne reste plus qu’a ajoutez cette commande: colorscheme mustang dans votre vimrc et vous aurez installer le thème. Personnellement, j’utilise vitamin.

Le folding

Qu’est-ce que le folding ? C’est la fonctionnalité qui permet de replier son code afin de gagner en lisibilité sur les gros projets par exemple.

Vim - Folds

Si vous voulez que le folding se base sur le langage que vous utilisez (vous pourriez le faire sur l’indentation en remplaçant syntax par indent dans le foldmethod) afin de faire les replis, il faut changer quelques lignes dans notre .vimrc, à savoir :

 
set foldmethod=syntax " fold spécifié selon la syntaxe du langage
set nofoldenable      " par défaut on laisse tout visible 
set foldlevel=1       " on repli pour le premier niveau

Maintenant voyons les commandes qu’il faut mieux connaitre pour tirer parti au maximum de ce système :

  • zj déplace le curseur sur le repli suivant
  • zk déplace le curseur sur le repli précédent
  • za bascule l’état du repli sous le curseur
  • zo ouvre le repli sous le curseur
  • zO ouvre tout les replis sous le curseur
  • zc fermer un repli sous le curseur
  • zR Décrémente le niveau du foldlevel à 0 == tous les replis sont ouverts
  • zM ferme tout les replis
  • zd supprime tout les replis sous le curseur
  • zE supprime tout les replis
  • [z se déplacer au début du repli
  • ]z se déplacer à la fin du relpli

Les abbreviates

Les abbreviates sont des outils bien pratique et très puissant pour un programmeur c’est un plus vraiment non négligeables, en effet ces derniers permettent des petites raccourcis très utile. Prenons un exemple concret, je fais du C, depuis maintenant quelques temps, et bien souvent, on a besoin de fonction comme la fonction printf (permettant d’afficher du texte).

Et bien grâce aux abbreviates vous pouvez gagner un temps précieux. On définit un raccourci, ici on pourrait faire par exemple: abbreviate pri printf(«  »);. Et donc dès que je ferais pri et que j’appuierai sur tab, printf(«  »); s’affichera !

On pourrait par exemple faire aussi: en Java: abbreviate pln System.out.println(«  »); ainsi en tapant juste pln + tab vous auriez la fonction en java pour afficher du texte ! Ce qui est vraiment bien c’est qu’on peut ajouter ces abbreviates dans le vimrc et voilà les raccourcis sont définitivement crées !

Le mapping

Le mapping permet d’associer une action à une séquence de touches. Par exemple, je programme en C et malencontreusement, j’oublie un point virgule et bien avec le mapping, vous allez pouvoir définir une séquence vous permettant de le rajouter automatiquement à la fin de la ligne. Voici quelques exemple de mapping issu de mon vimrc:

map <C-e> :tabe. 
map <C-p> A;<ESC>
map <C-b> A<br /><ESC>

Le premier mapping, ctrl + e, aura comme action :tabe, il nous restera alors plus qu’à mettre le nom du fichier afin de l’ouvrir dans un nouvel onglet.
Le second mapping permet de rajouter un point virgule à la fin d’une ligne (le fameux exemple ^^). Enfin, ,le dernier mapping : ctrl + b permet de faire faire un <br /> et l’ajouter en fin de ligne.

Remarque : un <br /> en html, permet de faire un retour à la ligne.

La correction orthographique grâce au mapping

Sous vim il est possible, d’utiliser un correcteur orthographique. Tout d’abord, on va créer un dossier spell dans le dossier .vim/, comme ceci :

mkdir -p ~/.vim/spell
cd ~/.vim/spell

Ensuite on va télécharger des dictionnaires de langues, ici le français :

wget http://ftp.vim.org/vim/runtime/spell/fr.latin1.spl
wget http://ftp.vim.org/vim/runtime/spell/fr.latin1.sug
wget http://ftp.vim.org/vim/runtime/spell/fr.utf-8.spl
wget http://ftp.vim.org/vim/runtime/spell/fr.utf-8.sug

Enfin, on va rajouter quelques lignes au vimrc:

map <F2> :set spell!<CR>
set spelllang=fr,en 
hi SpellBad ctermfg=Red ctermbg=NONE

Comme on peut le voir, avec le mapping, si on appui sur F2, on active la correction. La deuxième ligne précise la langue du dictionnaire utilisé, enfin la dernière ligne, permet d’afficher les erreurs en rouge. (le fg pour foreground et le bg pour background). Enfin pour corriger une faute placer vous sur le mot que vous voulez corriger et taper z= ensuite vous choisissez la correction qui vous va et c’est bon ;).

Vundle LE plugin de Vim

Afin d’améliorer Vim, on peut lui ajouter certains plugins, du simple plugin permettant de mettre du code en commentaire assez rapidement, à l’explorateur de fichiers puissant. Tout ces petits plugins vont nous permettre d’améliorer notre efficacité avec Vim.

Le premier plugin que l’on va voir est Vundle, il permet de gérer facilement tout les plugins qui si vous les installez normalement s’amassent dans le dossier .vim et ça devient vite le bordel (nan, nan je ne parle pas d’expérience ^^). Une fois téléchargée, on crée un dossier intitulé bundle dans lequel on place le dossier vundle que vous aurez récupéré. Pour activer vundle on rajoute dans notre vimrc, ces deux lignes:

set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

A partir de là, rien de compliqué vous téléchargé le plugin qui vous intéresse et le mettez dans le dossier bundle. Et enfin pour activer le plugin vous rajouter une ligne de ce type dans votre fichier de configuration: Bundle ‘nomDuPlugin’.

NerdTree, l’explorateur de fichiers de Vim

NerdTree : Ce plugin est un explorateur de fichiers et permet d’ouvrir des fichiers et des répertoires aisément. Il peut afficher les fichiers systèmes et les affiches sous formes d’arbre.

Plugin vim : Nerdtree

Plugin vim : Nerdtree

La commande pour ouvrir cet explorateur de fichier est NERDTreeToggle. Ce qui reconnaissons le n’est pas très simple, donc selon moi un petit mapping s’impose:

map <C-X> :NERDTreeToggle<CR>

Et voila, vous avez maintenant la possibilité avec Ctrl + x d’ouvrir un explorateur de fichier puissant !

TagBar, afficher la strucutre de votre code

Tagbar : C’est un plugin qui va permettre de récapituler chaque macros, fonctions, énumérations… En cliquant sur la déclaration d’une fonction vous serez directement amené au début de cette dernière. Pour permettre cela le plugin s’appuie sur un logiciel appelé ctags. Pour installer ce dernier, il suffit de faire comme d’habitude :

sudo apt-get install exuberant-ctags

Un bon truc à savoir, par défaut quand vous ouvrez tagbar, vous n’avez pas forcément le focus dessus pour l’activer, il suffit de rajouter au .vimrc, ceci :

let g:tagbar_autofocus=1

Enfin voici un screenshot du plugin en action.

Plugin vim : Tagbar

Plugin vim : Tagbar

Powerline, afficher des informations sur le fichier couramment édité

Powerline : Powerline n’est pas un plugin utile en soit, il sert juste à améliorer le style visuel de vim, il a quand même quelques utilité, il permet d’afficher diverses infos sur le fichier que vous éditer, comme le type du fichier (xhtml, c, java…). Il permet de savoir aisément dans quel mode l’on se trouve (mode insertion, ou interactif…).

Plugin vim : Powerline

Plugin vim : Powerline

Afin d’afficher tout le temps le statut de la barre (et donc afficher le plugin), il faut rajouter une ligne dans notre .vimrc:

set laststatus=2

Quelques plugins à connaître pour Vim

TComment : tComment est un plugin qui permet de commenter une ligne ou une portion de code très facilement, vous passez en mode visuel en appuyant sur ctrl + v, vous sélectionnez les lignes que vous voulez commenter en appuyant sur gc. Pour le faire sur une ligne il suffit de taper gcc.

SnipMate : SnipMate est surement le plus utile des 4 plugins que je vous ai présenté. Un peu comme les abbreviates qu’on a vu plus haut, snipMate est un plugin qui permet de créer des raccourcis pour des bouts de code, là où snipMate est plus puissant c’est qu’il permet de faire des raccourcis non pas d’une ligne mais de plusieurs. Par exemple en C, si vous tapez (en mode insertion) main + alors vous aurez:

int main(int argc, char* argv[]) {
    // code
    return EXIT_SUCCESS;
}

De plus, vous pouvez modifier vous-même les raccourcis en allant dans le dossier snipMate que vous aurez placer dans le dossier bundle, vous trouverez un dossier snippets contenant des avec des raccourcis adaptés aux types du fichier. Beaucoup de type de fichiers de programmation sont gérés: on peut compter le java, le c, le php, le javascript et j’en passe.

Syntastic : Ce plugin permet de vérifier la syntaxe du langage que vous utiliser, il est vraiment très utile, prenons un exemple concret, j’oublie un ‘;’ dans un code C. Une fois que j’enregistrerais mon fichier (ou automatiquement, c’est à la demande de l’utilisateur), le plugin va détecter l’erreur et me l’afficher. Ce qui permet donc de ne pas aller compiler alors qu’on a des erreurs, un vrai plus !

Des easter eggs

Et oui décidément les programmeurs s’amusent souvent à insérer des petites références ou des petites blagues dans leurs logiciel, Vim n’y échappe pas, en voici quelques uns:

  • :help! L’aide vous affiche alors, « pas de panique ! ».
  • :help 42 Référence à Adams Douglas et au fameux chiffre 42.
  • :help holy-grail Affiche: « tu l’as enfin trouvé Arthur », les fans de kaamelott, comme moi sauront apprécier cette dédicace 🙂 !

Conclusion

Enfin pour conclure cette article, je vais vous donner ma config actuelle :

set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

Bundle 'snipMate'
Bundle 'nerdtree'
Bundle 'powerline'
Bundle 'emmet'
Bundle 'tcomment'
Bundle 'syntastic'
Bundle 'tagbar'

set number
set ai
set showcmd
set t_Co=256
syntax on
set bg=light
colorscheme vitamin 
set mouse=a

set nocompatible
set laststatus=2

map <F4> :tabe ~/.vimrc<CR>
map <C-e> :tabe 
map ! :w<CR>
map <C-x> :NERDTreeToggle<CR>
map ; A;<ESC>

let g:tagbar_autofocus=1
map <C-t> :TagbarToggle<CR>

map <C-b> A<br /><ESC>
map <F3> :tabe ~/.vim/bundle/snipMate/snippets/c.snippets<CR>

let g:user_emmet_leader_key = '<C-y>'

set tabstop =4
set shiftwidth =4
set softtabstop =4

set hlsearch
au BufRead,BufNewFile *.md set filetype=markdown
set fileencoding=utf-8

let g:syntastic_c_include_dirs = [ '../../include', 'include' ]

map <F2> :set spell!<CR>
set spelllang=fr
hi SpellBad ctermfg=Red ctermbg=NONE

set foldmethod=syntax
set nofoldenable
set foldlevel=1

A bientôt, pour un nouvel article !

1 comment

  1. Bon tuto ! Merci, il faudrait juste ajouter que sur Debian 9.6 le fichier ~/.vimrc doit être édité au niveau de :
    if filereadable(« ~/.vimrc »)
    source ~/.vimrc
    end if

    pour que le fichier vimrc fonctionne correctement.

    Bonne soirée.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.