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.
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) ;:A,Bs/ancien/nouveau/g
: remplace toutes les occurrences de la ligne A à la ligne B
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.
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.
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.
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.
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 ;-)