LinuxPedia

Wiki libre et indépendant dédié à GNU-Linux et BSD.

Outils pour utilisateurs

Outils du site


util:vim

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 ;)

Liens

util/vim.txt · Dernière modification : 2018/11/17 12:54 de 127.0.0.1