Table des matières
VI-Improved (vim)
Présentation
Vim, c'est quoi ? Une description en 6 Ko
Vim (“Vi IMproved”, c'est-a-dire “Vi ameliore”) est un clone de Vi, a savoir un programme semblable a l'éditeur de texte “Vi”.
Vim fonctionne en mode texte sur tous les types de terminaux, mais il dispose aussi d'une interface graphique, avec menus déroulant et souris.
L'auteur principal est Bram Moolenaar bram@vim.org. Vim est distribué sous licence opensource compatible GPL. C'est un “charity-ware” : vous êtes encourages a faire une donation aux orphelins d'Ouganda (voyez : “:help uganda”).
Les modes d'édition
Il y a plusieurs modes d'édition. Par défaut, quand vim s'ouvre, on se retrouve en mode interactif. Avant de changer de mode, il faut revenir au mode interactif:
- Le mode interactif: on n'écrit pas du texte dans ce mode là, les touches sont utilisées comme raccourcis clavier.
- Le mode insertion: là, c'est pour entrer du texte
- Le mode remplacement: chaque caractère inséré remplace le caractère sous le curseur
- Le mode commande: pour entrer des commandes
- Le mode recherche
- Le mode visuel: pour faire des sélections, copier, coller, etc.
On bascule d'un mode à l'autre à l'aide de raccourcis clavier en mode interactif:
- Pour revenir au mode interactif: <esc>
- Depuis le mode interactif:
- Mode insertion: <i> ou <s> ou <insert>
- Mode remplacement: <R> ou <insert> + <insert>
- Mode commande: <:>
- Opérations en mode interactif:
- Recherche: </>
- Visuel: <v>
- Visuel ligne: <V>
- Visuel bloc: <ctrl> + <v>
Les opérations de base
En mode interactif
- Se déplacer: <h> droite, <j> bas, <k> haut, <l> gauche, ou flèches du clavier
- Défaire: <u>
- Refaire: <ctrl> + <r>
- Passer de majuscule à minuscule: <~>
- Supprimer le caractère sous le curseur (eq touche suppr): <x> ou <suppr>
- Supprimer un caractère en arrière (eq touche ret arrière): <X>
En mode visuel
- copier: <y>
- couper: <d> coller: <p> supprimer: <x> ou <suppr>
En mode recherche
- Rechercher: </> + ma recherche + touche <enter>
- Occurrence suivante: <n>
- Occurrence précédente: <N>
La recherche est sensible à la casse, pour ignorer la casse, utilisez la commande: set ignorecase
La recherche supporte les expressions régulières.
Substitution
Vim utilise la même syntaxe que sed pour les expressions relationnelles. Le caractère d'échappement est l'antislash : \
Pour remplacer toutes les occurrence d'une expression:
:%s/<expression à chercher>/<expression qui va la remplacer>/g
Par exemple:
:%s/\/usr\/bin/\/usr\/share\/bin/g
Ceci remplace /usr/bin par /usr/share/bin
En mode commande
- Enregistrer: w
- Quitter: q
- Enregistrer et quitter: wq
- Quitter en ignorant les modifications: q!
Les opérations avancées
Les buffers
À chaque fois qu'on ouvre un document, le contenu de celui-ci est copié dans un buffer.
En mode commande:
- Avoir une liste des buffers: ls
- Changer de buffer: b<numéro du buffer> Ouvrir
- Buffer précédent/suivant: bp ou bn
- Un fichier dans un nouveau buffer: b nomdufichier
- Fermer un buffer: bw
- Ouvrir un buffer en splitant l'écran: sb <fichier>
Les onglets
En mode commande:
- ouvrir un fichier dans un nouvel onglet: tabedit <nom du fichier>
- Fermer un onglet: tabclose
En mode interactif:
- Onglet suivant/précédent: <gt> ou <gT>
Spliter l'écran
En mode commande:
- spliter horizontalement: sp
- spliter verticalement: vsp
En mode interactif, toute commande est précédée par <ctrl> + <w>:
- Changer de viewport: <ctrl> + <direction> (fleche ou h,j,k,l)
- Fermer un viewport: <q>
- Échanger deux viewports: <r> ou <R>
Les replis
Replier le code est quelque chose de très utile. On peut effectuer les replis à la main mais cela s'avère laborieux, surtout avec des fichiers de plusieurs milliers de lignes!
Heureusement, il existe des méthodes intégrées. Par exemple, si votre code est correctement indenté ou avec un langage comme python, basé sur l'indentation:
:set foldmethod=indent
Si vous préférez vous baser sur la syntaxe (if, while, for, etc):
:set foldmethod=syntax
Les commandes pour les replis:
- zo et zO (ouvre le repli sous le curseur ou tous les replis successifs entourant le curseur),
- zc (ferme le repli sous le curseur),
- zr et zR (ouvre un niveau de repli supplémentaire ou tous les niveaux de replis),
- zm et zM (ferme un niveau de repli supplémentaire ou tous les niveaux de replis),
- zf (permet de créer manuellement un repli, en mode visuel ou couplé avec un déplacement),
- zd et zE (supprime le repli sous le curseur ou tous les replis du fichier),
- zj et zk (se déplace respectivement au repli du bas ou du haut),
- [z et ]z (atteint l'ouverture ou la fermeture du repli actif).
Configuration
La configuration de vim se fait au moyen du fichier ~.vimrc. Vous pouvez inclure dans ce fichier toute commande que vous pouvez faire en mode commande. Par exemple:
:set number
Ceci affiche les numéros de ligne. Si vous voulez que les numéros de ligne soient toujours affichés, vous n'avez qu'à ecrire dans votre .vimrc:
set number
On peut aussi rajouter des scripts dans son vimrc, que ce soient des script bash, python ou perl (à condition d'avoir installer les add-on), les possibilités sont donc infinies.
On peut aussi définir ses propres raccourcis clavier qui peuvent aussi lancer leur propres scripts mais pour l'exemple, on va prendre une configuration simple mais efficace:
" couleur par rapport à la syntaxe syntax on " mon terminal a un fond noir set background=dark " réglage pour gérer la souris en interne, pour la gérer en externe, mettre r set mouse=a " detecter le type de fichier et charger les plugins filetype indent plugin on " forcer le retour à la ligne lorsque celle-ci dépasse de l'écran set wrap "indentation intelligente set smartindent " afficher les numéros de ligne set number " customisation de la barre de status set statusline=%<%f%m\ %r\ %h\ %w%=%l,%c\ %p%% " ?????? set whichwrap=<,>,[,] " rester dans la même colone quand on change de ligne set nostartofline "afficher les replis set foldcolumn=4 " voire la ligne et la colone en bas à droite set ruler " optimiser la vitesse de réaction du terminal set ttyfast " pour un fichier texte, activer le spellchecker autocmd BufEnter *.txt set spell set spelllang=fr " effacer les badwhitespace à l'enregistrement autocmd BufRead,BufWrite * if ! &bin | silent! %s/\s\+$//ge | endif " methode de repli automatique set foldmethod=indent
Les add-ons
Il y a de nombreux add-ons, scripts et macros pour vim. Notamment pour chaque langage de programmation, l'intégration d'un terminal dans un split (vim-conque), l'outliner (vim-outliner), etc.
Vim-addons
Vim-addons est une commande qui permet de gérer les add-ons et de les ajouter à votre session utilisateur. Si l'add-on fait partie d'un package de votre distribution, il n'est pas ajouté à votre session.
Vim ou emacs?
On ne peut pas décemment écrire un article sur vi sans évoquer le plus vieux troll de l'histoire de l'internet.
Emacs est l'autre éditeur en console plébiscité par la communauté. Les différences entre les deux logiciels ont opposé et opposent encore les farouches guerriers de emacs aux terribles cohortes de vi.
On reproche principalement à emacs ses raccourcis claviers alambiqués, sa lourdeur, le fait qu'il ne fait pas le café, de ne pas être vi, etc. Et on reproche à vi… des choses sans importance. Vi est beaucoup mieux ;)