L'éditeur Vim : fonctions avancées

Vous l'attendiez peut-être : voici la suite de mon tutoriel sur Vim. Si vous n'avez pas lu la première partie, rendez-vous à cette adresse. Dans cette partie, je vais vous expliquer comment rechercher du texte dans un document ouvert, remplacer du texte, configurer les backups, et bien d'autres choses.

Table des matières

  1. La recherche
  2. Travailler avec plusieurs fichiers
  3. Les backups
  4. Mettre la correction orthographique en français
  5. Les plugins

La recherche

Rechercher du texte

Pour rechercher du texte, il suffit de taper / en mode commande, suivi du mot à rechercher. Taper /bonjour recherchera donc la prochaine occurrence de « bonjour » dans votre fichier. Appuyez sur n pour aller à la prochaine occurrence, et N (shift + n) pour aller à la précédente. Vous pouvez utiliser ? à la place de / pour rechercher en arrière.

Pour améliorer cette fonction, vous pouvez éventuellement ajouter les lignes suivantes à votre vimrc (tapez la commande :e $MYVIMRC dans Vim pour éditer ce dernier) :

set incsearch " recherche en temps réel
set ignorecase " recherche insensible à la casse
set smartcase " idem, tant que vous tapez en minuscules
set hlsearch " met tous les termes trouvés un surbrillance

Vous pouvez aussi rechercher le mot présent sous votre curseur en appuyant tout simplement sur « * » en mode commande.

Rechercher et remplacer du texte

Pour rechercher et remplacer du texte, c'est un tout petit peu plus compliqué. La syntaxe de base est :s/ancien/nouveau. Cependant, cette syntaxe ne replacera que la première occurrence du mot « ancien » par « nouveau » sur la ligne où se trouve actuellement votre curseur. Ce n'est donc pas très intéressant... Bien évidemment, il est possible de modifier cette commande afin qu'elle remplace toutes les occurrences du mot. Voici les quatre méthodes de remplacement possibles :

  • :s/ancien/nouveau : remplace la première occurrence dans la ligne où se trouve le curseur ;
  • :s/ancien/nouveau/g : remplace toutes les occurrences dans la ligne où se trouve le curseur ;
  • :%s/ancien/nouveau/g : remplace toutes les occurrences dans le fichier (c'est celui que j'utilise le plus souvent) ;
  • :#,#s/ancien/nouveau/g : remplace toutes les occurrences de la ligne # à la ligne #

Le g qui se trouve à la fin des trois dernières commandes est une option qui indique de remplacer toutes les occurrences. Vous pouvez aussi utiliser l'option c pour demander une confirmation avant de remplacer chaque occurrence. Par exemple, si vous tapez :%s/ancien/nouveau/cg, Vim cherchera à remplacer toutes les occurrences d'« ancien » dans votre fichier par « nouveau », en vous demandant de confirmer à chaque fois.

Si vous avez sélectionné du texte en mode visual ou visual block, vous pouvez également rechercher et remplacer du texte dans ce que vous avez sélectionné. Il suffit pour cela de taper les commandes ci-dessus une fois le texte sélectionné (le :%s/ancien/nouveau ne fonctionnera fatalement pas). Vim comprendra ce que vous voulez faire et votre commande ressemblera à ceci :

:'<,>'s/ancien/nouveau

Travailler avec plusieurs fichiers

Pour travailler avec plusieurs fichiers, vous pouvez utiliser des onglets ou même séparer votre fenêtre en plusieurs parties.

Afficher plusieurs documents

Pour ouvrir un nouvel onglet, tapez simplement :tabnew. Vous pouvez également spécifier un nom de fichier pour ouvrir un fichier dans un nouvel onglet.

Les onglets
Les onglets

Pour séparer votre fenêtre en deux horizontalement, tapez :split (ou juste :sp). Pour le faire verticalement, tapez :vsplit ou juste :vsp. Bien évidemment, vous pouvez aussi spécifier des noms de fichiers.

Exemple d'utilisation du split
Exemple d'utilisation du split

Insérer un fichier dans le fichier en cours

Pour inclure un fichier à la position de votre curseur, tapez tout simplement :r nom_de_votre_fichier.

Les backups

Les backups peuvent vous sauver la vie (enfin, celle de vos fichiers), c'est pourquoi je vous conseille de les activer via votre fichier vimrc, comme suit :

set writebackup " active les backups (n'écrase pas un backup si des backups de deux fichiers avec le même nom sont effectués)
set backupdir=~/.vim/backups " change le dossier pour les backups

Au passage, pour ceux qui ne le sauraient pas, « ~ » en shell est votre dossier utilisateur. Vous pouvez aussi utiliser « $HOME » à la place de « ~ ».

Mettre la correction orthographique en français

Pour mettre la correction orthographique dans la langue de Molière, il faut commencer par ajouter deux lignes à votre vimrc :

set spell " active la correction orthographique
setlocal spell spelllang=fr " met la correction en français

Ensuite, il faut ajouter le dictionnaire français dans votre dossier .vim se trouvant dans votre répertoire utilisateur. Commencez par le télécharger ici et mettez le ensuite dans le dossier ~/.vim/spell/.

Les plugins

Les plugins permettent d'ajouter toutes sortes de fonctionnalités à Vim. Vous pouvez retrouver une liste de plugins sur le site officiel. Je vais vous expliquer comment installer des plugins et vous en présenter quelques-uns.

Comment installer un plugin

Pour installer un plugin, vous avez deux options : soit vous copiez tout le contenu du dossier du plugin dans le répertoire ~/.vim, soit vous créez un sous-dossier pour ce dernier dans ce même répertoire (ce que j'ai tendance à faire car cela facilite une éventuelle désinstallation). Si vous faites cela, il faut alors ajouter une ligne à votre vimrc :

set runtimepath+=~/.vim/dossier_du_plugin

Parfois, il faut aussi rajouter en plus le dossier « after » contenu dans celui du plugin :

set runtimepath+=~/.vim/dossier_du_plugin/after

Maintenant que vous savez comment installer des plugins, je vais vous en présenter deux.

TagList

Ce plugin va vous permettre de splitter votre fenêtre en deux pour afficher une table des matières du document ouvert. Pour du code Java par exemple, il affichera une table des matières de vos méthodes, vous permettant d'accéder à celles-ci rapidement.

Exemple d'utilisation de TagList
Exemple d'utilisation de TagList

Installation

Pour l'installer, téléchargez-le ici, décompressez l'archive et utilisez une des deux méthodes d'installation décrites ci-dessus. Étant donné que ce plugin tient en un seul fichier, je vous conseille de le copier tout simplement à la racine du dossier ~/.vim.

Pour que le plugin fonctionne, il faut également installer exuberant-ctags, que vous pouvez trouver ici. Pour installer ce dernier, décompressez l'archive, puis ouvrez un Terminal. Une fois le Terminal ouvert, tapez cd suivi d'un espace, puis glissez-déposez le dossier décompressé dans le Terminal et validez. Entrez ensuite, dans l'ordre, les commandes suivantes :

./configure
make
make install

Si tout s'est bien passé, ctags est à présent installé. Cependant, si vous voulez l'utiliser pour vos documents LaTeX afin d'afficher les sections, sous-sections et autres présentes dans ce dernier et donc pouvoir naviguer facilement, il faut effectuer une rapide configuration du plugin. Pour cela, créez un fichier nommé « .ctags » dans votre dossier utilisateur et collez-y le texte suivant :

--langdef=latex
--langmap=latex:.tex
--regex-latex=/^\\part[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/PART \2/s,part/
--regex-latex=/^\\part[[:space:]]*\*[[:space:]]*\{([^}]+)\}/PART \1/s,part/
--regex-latex=/^\\chapter[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/CHAP \2/s,chapter/
--regex-latex=/^\\chapter[[:space:]]*\*[[:space:]]*\{([^}]+)\}/CHAP \1/s,chapter/
--regex-latex=/^\\section[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/\. \2/s,section/
--regex-latex=/^\\section[[:space:]]*\*[[:space:]]*\{([^}]+)\}/\. \1/s,section/
--regex-latex=/^\\subsection[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/\.\. \2/s,subsection/
--regex-latex=/^\\subsection[[:space:]]*\*[[:space:]]*\{([^}]+)\}/\.\. \1/s,subsection/
--regex-latex=/^\\subsubsection[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/\.\.\. \2/s,subsubsection/
--regex-latex=/^\\subsubsection[[:space:]]*\*[[:space:]]*\{([^}]+)\}/\.\.\. \1/s,subsubsection/
--regex-latex=/^\\includegraphics[[:space:]]*(\[[^]]*\])?[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/\3/g,graphic+listing/
--regex-latex=/^\\lstinputlisting[[:space:]]*(\[[^]]*\])?[[:space:]]*(\[[^]]*\])?[[:space:]]*\{([^}]+)\}/\3/g,graphic+listing/
--regex-latex=/\\label[[:space:]]*\{([^}]+)\}/\1/l,label/
--regex-latex=/\\ref[[:space:]]*\{([^}]+)\}/\1/r,ref/
--regex-latex=/\\pageref[[:space:]]*\{([^}]+)\}/\1/p,pageref/-regex-latex=/\\subsubsection\*\{([^}]*)\}/\1/u,subsubsection/

Ajoutez ensuite cette ligne dans votre vimrc :

let tlist_tex_settings = 'latex;s:sections;g:graphics;l:labels'

Utilisation

Pour afficher le plugin dans un document, tapez la commande :TlistToggle. Je vous conseille d'assigner cette commande à une touche, ce qui vous apprendra comment faire cela par la même occasion. Pour assigner une commande à une touche, il suffit d'ajouter une ligne à votre vimrc. Voici ce qu'il faut mettre pour celle-ci :

map <F4> :TlistToggle<CR>

Vous pouvez bien évidemment replacer F4 par la touche de votre choix. Si vous voulez faire Ctrl + une touche, il faut mettre <c-votre_touche>, comme par exemple <c-s> pour Ctrl + S.

La TagList se met à jour dès que vous sortez de la fenêtre de cette dernière. Par conséquent, pour switcher vers votre table des matières à jour, il faut : switcher vers la table, reswitcher vers le document et ensuite retourner sur la table. Plutôt embêtant... C'est pourquoi j'ai assigné une combinaison de touches à cela. Personnellement, j'ai choisi Shift + Tab :

map <S-Tab> <c-W><c-W><c-W><c-W><c-W><c-W>

UltiSnips

UltiSnips permet d'ajouter des snippets similaires à ceux que l'on peut utiliser dans TextMate. Ça permet d'avoir de l'autocomplétion assez puissante lorsque vous codez.

UltiSnips en action
UltiSnips en action

Installation

Pour l'installer, téléchargez-le à cette adresse. Si vous décidez d'utiliser la deuxième méthode d'installation (le mettre dans un dossier séparé, ce que j'ai fait personnellement), il faudra ajouter également le dossier « after » au runtimepath.

Je vous conseille également vivement d'ajouter ces trois lignes dans votre vimrc afin que l'autocomplétion agisse un peu plus comme celle de TextMate :

let g:UltiSnipsExpandTrigger="<Tab>"
let g:UltiSnipsJumpForwardTrigger="<Tab>"
let g:UltiSnipsJumpBackwardTrigger="<S-Tab>"

Utilisation

Au niveau de l'utilisation, je ne vais pas vous faire une liste de tous les raccourcis qui existent, cela serait un peu long... La plupart sont assez intuitifs si vous avez déjà utilisé une fonction du même genre. Vous pouvez taper par exemple « wh » suivi d'un tab pour rapidement faire une boucle while, « if » pour un if, « for » pour une boucle for. Pour passer d'un élément à l'autre d'un snippet, comme par exemple les parties d'une boucle for, utilisez également la touche tab.

Voici qui conclut ce tutoriel :-) Si vous avez des questions ou des remarques, les commentaires sont là pour ça ;-)

Merci d'avoir pris le temps de lire cet article. Si vous l'appréciez, n'hésitez pas à le partager autour de vous.

Si vous le souhaitez, vous pouvez également soutenir l'écriture de ces articles via le bouton Flattr ci-dessous ou en m'offrant une bière.

Vous pouvez également vous abonner ou me suivre sur les réseaux sociaux à l'aide des boutons ci-dessous.

Commentaires

comments powered by Disqus
S'abonner

Si vous souhaitez recevoir un e-mail lors de mes prochaines publications, laissez-moi votre adresse ci-dessous. Elle ne sera jamais divulguée à des tiers.