Vi

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Éditeur de texte POSIX historique (terminal)
Commande vi
Contexte Norme POSIX — garanti présent (ou son équivalent minimal) même sur les systèmes sans vim : rescue/live CD, conteneurs allégés, systèmes embarqués
Voir aussi Vim (évolution moderne, coloration syntaxique, plugins...)

vi (visual editor) est l'éditeur de texte en ligne de commande de la norme POSIX. Sur la plupart des distributions actuelles, la commande vi est en réalité un alias ou un lien symbolique vers Vim lancé en mode compatibilité — les modes et commandes de base (normal/insertion, dd, yy, p, :wq, :q!...) sont donc communs aux deux éditeurs et détaillés sur la page Vim.

L'intérêt de connaître spécifiquement vi (et pas seulement les raccourcis vim) est ailleurs : c'est le seul éditeur dont la présence est quasiment garantie même quand rien d'autre n'est installé — environnement de secours (rescue/single user), live CD minimaliste, conteneur allégé, système embarqué. Dans ces contextes, on trouve parfois une implémentation minimale (busybox vi, toybox vi, une variante BSD) qui ne comprend qu'un sous-ensemble des commandes vim modernes — les commandes ci-dessous, issues du vi POSIX classique (mode ex compris), fonctionnent dans ce sous-ensemble minimal là où des raccourcis propres à vim pourraient manquer.

Commandes ex (mode :) sur des plages de lignes

Le mode ex de vi (hérité de l'éditeur de ligne ed) permet d'agir sur des plages de lignes sans jamais quitter le clavier — utile en édition à distance sans souris :

:g/^$/d              " supprime toutes les lignes vides du fichier (global)
:g/motif/d           " supprime toutes les lignes contenant "motif"
:g/motif/s//remplace/g   " remplace "motif" par "remplace" sur toutes les lignes qui le contiennent
:g/motif/s//remplace/gc  " idem, avec confirmation ligne par ligne
:10,20w toto         " sauve les lignes 10 à 20 dans un nouveau fichier "toto"
:10,20w >> toto      " ajoute les lignes 10 à 20 à la fin du fichier "toto" existant
:r toto              " insère tout le contenu du fichier "toto" à la position du curseur
:r !ls -1            " insère le résultat d'une commande shell à la position du curseur

Marques

Pour délimiter une plage arbitraire de lignes avant une opération ex, sans passer par la sélection visuelle :

ma                   " pose la marque "a" sur la ligne courante
mb                   " pose la marque "b" sur une autre ligne
:'a,'b w extrait.txt  " sauve dans "extrait.txt" tout le texte entre les marques a et b

Astuces d'édition courantes

:sort u              " trie les lignes et supprime les doublons
:s/.*/\U&/           " met la ligne courante en majuscules (\L pour minuscules)

Format de fichier (équivalent minimal de Dos2unix directement depuis l'éditeur, pratique quand l'utilitaire dédié n'est pas installé) :

:set fileformat=unix  " convertit les fins de ligne au format Unix (LF) à la sauvegarde
:set fileformat=dos   " convertit les fins de ligne au format Windows (CRLF) à la sauvegarde

Travailler avec plusieurs fichiers ouverts

vi fichier1 fichier2 fichier3
:n                   " passe au fichier suivant de la liste
:N                   " revient au fichier précédent
:sp fichier2         " ouvre "fichier2" dans une fenêtre séparée (split)
Ctrl+w               " puis une flèche ou w : change de fenêtre active

Informations sur le fichier en cours d'édition

Ctrl+g               " affiche le nom du fichier et la position du curseur
:.=                  " affiche le numéro de la ligne courante
:=                   " affiche le nombre total de lignes du fichier

Voir aussi

  • Vim — évolution moderne de vi : coloration syntaxique, configuration persistante (~/.vimrc), plugins
  • Dos2unix — conversion de fin de ligne en dehors de l'éditeur
  • Grep — recherche de motifs dans des fichiers
  • Sed — édition de flux en ligne de commande, alternative non interactive aux commandes ex ci-dessus