Aide mémoire VI

AIDE MEMOIRE VI

Vi est un éditeur de textes plein écran présent sur la grande majorité des systèmes UNIX™. Voici un aide-mémoire pour son jeu de commandes de base.

Table des matières

[Notations] – [Appel de l’éditeur] – [Modes d’édition] – [Manipuler des fichiers] – [Déplacer le curseur] – [Ajuster l’écran] – [Modifier le texte] – [Annuler et Répéter] – [Marquer le texte] – [Rechercher et remplacer] – [Macros et abréviations] – [Etat du texte] – [Commandes « shell »] – [Configurer l’éditeur] – [Index]

Notations [Table des matières]

x ou X : caractère tapé (minuscule ou majuscule)

C-x : caractère tapé en maintenant Ctrl appuyée.

Les caractères spéciaux seront notés par leur nom abrégé : «Ech» pour échappement, «Ent» pour entrée, «Ret» pour retour arrière…

Les commandes commençant par :, /, ou ? s’affichent automa-tiquement au bas du terminal (ligne d’état) et doivent être terminées par «Ent».

[ ] ->> facultatif; ne pas taper les crochets
car ->> à remplacer par un seul caractère
chn ->> à remplacer par une chaîne de caractères
fich ->> à remplacer par un nom de fichier
cmd ->> à remplacer par une commande
n ->> à remplacer par un nombre (suite de chiffres)
nn ->> à remplacer par une référence à un numéro de ligne :
– un nombre (1, 25, …)
– un marqueur ou un déplacement ( . . , $, …)
– une expression à rechercher ( / chn / )

Appel de l’éditeur [Table des matières]

vi [fich] ->> Edite le fichier fich, s’il existe. Sinon, édite un nouveau fichier vide.
vi -r fich ->> Edite la dernière version du fichier fich en cas d’arrêt inopiné du système ou de l’éditeur.
vi + [nn] fich ->> Edite le fichier fich avec le curseur à la ligne nn [ par défaut : à la dernière ligne ]
vi fich1 fich2.. ->> Edite chacun des fichiers. Après avoir sauvé les changements dans l’un des fichiers, taper :n :n «Ent» «Ent» pour passer au suivant.

Modes d’édition [Table des matières]

Mode insertion ->> Les caractères tapés s’insèrent dans le texte du fichier édité. Un jeu réduit de commandes est disponible par l’intermédiaire de caractères de contrôle. Ce mode se termine en tapant «Ech».
Mode commande ->> Les caractères tapés sont considérés comme des commandes d’édition de texte.

Les commandes en majuscules et minuscules diffèrent. Il faut vérifier que les majuscules ne sont pas verrouillées si l’éditeur présente un comportement inhabituel.

Manipuler des fichiers [Table des matières]

:q ->> quitte vi
:q ! ->> quitte vi sans sauver les changements
ZZ, :wq! ou 😡 ->> sauve si possible et quitte vi
:[nn,nn] w[!]«Esp»[[>>]fich] ->> sauve le texte dans fich
:w ->> sauve sous le nom de fichier courant
:w ! ->> sauve sans vérifier les droits d’écriture
:w >>fich ->> ajoute le texte à la fin de fich
:nn,nn w fich ->> sauve les lignes de l’intervalle nn, nn
:args ->> affiche la liste des fichiers à éditer
:n[!] ->> édite le fichier suivant
:n! ->> ignore les changements
:rew[!] ->> édite le premier fichier dans la liste
:f fich ->> change le nom de fichier courant
:e[!][+n] [fich] ->> édite le fichier fich – voir :w :w
:e!+3 fich ->> édite fich en ligne 3, ignore changements
:e# ->> édite le dernier fichier
:[nn]r fich ->> insère fich dans le texte édité
:[nn]r ! sh-cmd ->> exécute une cmd shell et insère sa sortie dans le texte ( Si nn, après la ligne nn, sinon après le curseur )
:cd [répertoire] ->> change de répertoire de travail

Déplacer le curseur [Table des matières]

Chacune de ces commandes peut être précédée d’un nombre d’exécutions : 12w avancera de 12 mots.

h ou ¬ ou C-h ou «Ret» ->> un caractère à gauche
l ou ® ou «Esp» ->> un caractère à droite
j ou ¯ ou C-n ->> un caractère vers le bas
k ou ­ ou C-p ->> un caractère vers le haut
«Ent» ou +, – ->> début de ligne suivante, précédente
w, b, e ->> mot suivant, mot précédent, fin du mot
W, B, E ->> pareil sans tenir compte de la ponctuation
), ( ->> phrase suivante, précédente
}, { ->> paragraphe suivant, précédent
]], [[ ->> section suivante, précédente (v. Marquer le texte)
_ ou ^ ->> avance jusqu’au prochain non-blanc
fcar ->> avance jusqu’au prochain caractère car
Fcar ->> revient au dernier caractère car
tcar ->> avance jusqu’au caractère précédant car
Tcar ->> revient au caractère suivant car
´car ->> premier non-blanc de la ligne marquée car
car ->> va au caractère marqué car (v. Marquer le texte)

Les commandes suivantes peuvent aussi être précédées par n, mais le résultat dépend de la commande.

G, nG ou :n ->> fin du texte, ligne n du texte
H, nH ->> début de l’écran, ligne n de l’écran
L, nL ->> fin de l’écran, n lignes avant la fin de l’écran
O, $ ->> début de la ligne, fin de la ligne
n$ ->> fin de la (n -1)ème ligne après la ligne courante
|, n| ->> première colonne, n-ième colonne
/str[/]«Ret» ->> Recherche vers l’avant de l’expression str
?str [?]«Ret» ->> Recherche vers l’arrière de l’expression str

Ajuster l’écran [Table des matières]

C-l ->> effacer et redessiner l’écran
C-e, C-y ->> déplacer l’écran d’une ligne vers le haut, vers le bas
C-u, C-d ->> déplacer l’écran d’une demi-page vers le haut, le bas
C-b, C-f ->> déplacer l’écran d’une page vers le haut, vers le bas

Ces commandes précédées par n s’exécutent n fois ex : 3C-b remonte de trois pages dans le texte

z «Ent» ->> mettre la ligne courante en haut de l’écran
nnz «Ent» ->> mettre la ligne nn en haut de l’écran
nnz. ->> mettre la ligne courante [ou nn] au milieu de l’écran
nnz- ->> mettre la ligne courante [ou nn] en bas de l’écran

Modifier le texte [Table des matières]

Passage en mode insertion:

Si n est tapé avant la commande, le texte inséré est répété n fois.

a ->> insère du texte après le curseur, fin par «Esc»
A ->> insère du texte après la fin de la ligne
i ->> insère du texte avant le curseur
I ->> insère du texte avant le premier non-blanc de la ligne
o, O ->> ouvre une ligne avant, après la ligne du curseur

Commandes accessibles en mode insertion:

«Esc» ->> retour en mode commande
«Ent» ->> passe à la ligne
«Ret» ou C-h ->> efface le dernier caractère
C-vcar ->> permet d’insérer un car. de cmd ( «Esc », C-h, C-@,…)
C-@ ->> répète la dernière insertion si 1 er caractère du mode
C-w ->> efface le mot précédent
C-t ->> indente d’une position à droite (v. option sw sw)

Mode commande:

Opérateurs acceptant une commande de déplacement :

[n]oper[n’][dépl.] (v. Déplacer le curseur) – oper peut être :

d ->> coupe jusqu’au curseur déplacé
dd ->> la ligne
y ->> copie jusqu’au curseur déplacé
Y ou yy ->> la ligne
c ->> change jusqu’au curseur déplacé
cc ->> la ligne

ex.: d3w d3w coupe les 3 mots suivants, 4d3w coupe les 12 mots suivants (4 fois 3 mots), 4y copie les 4 lignes suivantes

Autres opérateurs

p, P ->> colle après, avant le curseur
[n]x, [n]X ->> coupe n caractères après, avant le curseur
D, C ->> coupe ou change jusqu’en fin de ligne (v. d$ d$ ou c$) c$)
~ ->> change le caractère sous le curseur maj. min.
[n]. ->> répète le dernier changement [ n fois ]
[n]rcar ->> remplace le caractère sous le curseur par car [ n fois ]
[n]Rstr «Esc» ->> remplace le texte à partir du curseur par str [ n f. ]
[n]sstr «Esc» ->> substitue str au caractère sous le curseur [ n car. ]
[n]Sstr «Esc» ->> substitue str à la ligne [ n lignes à partir du curseur ]
[n]J ->> concatène deux lignes [ n lignes ]
[n] ->> indente de n car. à gauche, à droite (v.opt. sw sw)
:[nn,nn]m n ->> déplace l’intervalle ou la ligne après la n-ième ligne
:[nn,nn]t n ->> copie l’intervalle ou la ligne après la n-ième ligne

Annuler et Répéter [Table des matières]

u ->> Annule la dernière modification
U ->> Annule les dernières modifications de la ligne courante
. ->> Répète le dernier changement

L’utilisateur dispose de

– 26 tampons de texte nommés de a à z

– 9 tampons des suppressions successives nommés de 1 à 9

p, P, y, Y et d peuvent être précédées par « car (minuscule) pour utiliser ou remplacer le tampon nommé car

y, Y et d peuvent être précédées par « car (majuscule) pour rajouter le texte copié/collé dans le tampon car

« car p ->> Rappelle le contenu du tampon nommé car
« 1pu.u.u ->> Recherche parmi les dernières suppressions

Marquer le texte [Table des matières]

mcar ->> Marque la position du curseur avec car
car ->> Retourne au caractère marqué car
->> Retourne à la ligne d’origine du dernier déplacement
´car ->> Retourne au 1er non-blanc de la ligne marquée car
´´ ->> Retourne au 1er non-blanc de dernière ligne changée

Une phrase se termine par ., ! ou ? suivi de «Ent» ou deux «Esp».

Un paragraphe est délimitée par une ligne vide.

Une section est délimitée par { en première colonne.

Les commandes (,) ,{, }, [[, ]] permettent de déplacer le curseur par phrases, paragraphes ou sections. (v. Déplacer le curseur)

Rechercher et remplacer [Table des matières]

Recherche de délimiteur associé Recherche de délimiteur associé:

% ->> Avec curseur sur (, ), [, ], { ou }, va au second délimiteur

Recherche d’une lettre: (voir f, F, t, T, Déplacer le curseur)

; ->> Répète la dernière recherche par f, F, t, T
, ->> Comme ; mais en sens inverse

Recherche et remplacement de chaînes:

On peut utiliser des expressions régulières qui acceptent les caractères spéciaux suivants :

^ ->> Début de ligne (si 1er caractère de l’expression)
$ ->> Fin de ligne (si dernier caractère de l’expression)

et si l’option magic a été choisie,

. ->> Joker, représente un caractère quelconque
[str] ->> Représente un caractère contenu dans str
[^str] ->> Représente un caractère non contenu dans str
[c1-c2] ->> Représente un caractère entre c1 et c2 inclus
\ ->> Représente le début, la fin d’un mot
* ->> Cherche 0, 1 ou plusieurs occurrences du dernier car.
\(, \) ->> Délimitent une sous-expression pour les remplacements
& ->> Remplacé par la chaîne trouvée
\n ->> Remplacé par la n-ième sous-expression \( … \)
\car ->> Remplacé par car ( permet d’obtenir /$^.*[&|~ et \)

Recherche de chaîne :

/str, ?str ->> Recherche l’expression str en avant, en arrière
/ «Ent», ? «Ent» ->> Répète la dernière recherche avant, arrière
// ->> Dernière expression régulière entrée
~ ->> Derniere expression de remplacement entrée
/str /; //; // ->> Recherche la troisième occurrence de str
/str /±n ->> Va à la n-ième ligne après (+) ou avant () str
n ->> Répète la dernière recherche dans le même sens
N ->> Répète la dernière recherche en sens inverse

Remplacement de chaîne:

:s/str1 /str2 /str3 ->> Substitue str2 à str1 dans la ligne

str3 est formé à partir de:

c ->> Confirmation des substitutions
g ->> Substitue toutes les occurrences de str1 dans la ligne
p ->> Affiche les changements
:[nn, nn]g/str ->> Va à la dernière ligne contenant str [dans nn,nn]
:[nn, nn]g/str /cmd ->> Exécute cmd sur les lignes contenant str
:[…]g!/str/cmd ->> Exécute cmd sur les lignes ne contenant pas str

application typique de g :
:g/str1/s//str2 /g ->> change str1 en str2 partout dans le texte

Le séparateur après :g ou :s n’est pas obligatoirement /
:s&/&\\&g ->> change tous les / de la ligne en \

Macros et abréviations [Table des matières]

Macros:

:map str cmd ->> Exécute cmd lorsque str est pressé
:unmap str ->> Supprime la définition de la macro str
:map ->> Affiche toutes les macros définies

Ces directives s’appliquent en mode commande seulement. Pour créer, supprimer ou afficher des macros valides aussi en mode insertion, il faut utiliser :map! ou :unmap!.

Abréviations:

:ab str texte ->> Dès que str est inséré, remplace par texte
:una str ->> Supprime la définition de l’abréviation str
:ab ->> Affiche toutes les abréviations définies

La liste des macros et abréviations d’un utilisateur est souvent regroupée dans le fichier .exrc .exrc (voir Configuration). Cela permet par exemple de gérer les touches de fonction, les flèches et autres touches spéciales sur des terminaux non standard.

Les touches inutilisées dans vi sont les touches de fonction et K V g q v * =.

Etat du texte [Table des matières]

Le résultat s’affiche sur la ligne d’état, en bas de l’écran

:f ou C-g ->> Affiche le nom de fichier courant et la position
:.= ->> Affiche le numéro de ligne courant (ligne du curseur)
:= ->> Affiche le nombre de lignes du fichier
:l ->> Affiche les caractères spéciaux de la ligne courante

Commandes « shell » [Table des matières]

Lancer un interpréteur de commandes:

:stop ou C-z ->> Suspend vi, retour par fg sur BSD
:sh ->> Lance un shell depuis vi, retour par C-d

Exécution d’un script shell:

:so fich ->> Exécute le script shell fich

Exécution d’une commande:

:! cmd ->> Exécute la commande cmd, qui peut utiliser

% ->> Remplacé par le nom du fichier courant
# ->> Remplacé par le nom du dernier fichier édité
! ->> Remplacé par la dernière commande lancée par :!
: :[nn] r! cmd ->> Insère la sortie de cmd
: :[nn,nn]w! cmd ->> Exécute cmd avec le texte édité en entrée

Voir aussi :w :w et :r :r dans Manipuler des fichiers pour utiliser nn.

Filtrage du texte:

[n] ! dépl cmd ->> Envoie la région de texte définie par n et dépl (déplacement depuis le curseur courant, voir Déplacer le curseur) sur l’entrée de la commande cmd, puis remplace cette région par la sortie de cmd. Exemple :
4!+sort -n ->> Trie numériquement cinq lignes à partir du curseur
!Gexpand ->> Réécrit les tabulations avec des espaces depuis la position du curseur jusqu’à la fin du texte.

Configurer l’éditeur [Table des matières]

Modifier les options de vi:

:set opt ->> modifie l’option opt. Pour une option de nom xxx

:set xxx ->> Positionne l’option xxx à vrai
:set noxxx ->> Positionne l’option xxx à faux
:set xxx=val ->> Donne une valeur à l’option xxx
:set xxx? ->> Affiche la valeur de l’option xxx
:set all ->>Affiche toutes les options
:set ->> Affiche les options au démarrage et les changements

Voici une liste non exhaustive des options de vi. Une implémentation particulière peut toujours comporter des variantes sur les valeurs par défaut, ou des options non listées ici.

Nom abrév. défaut description
autoindent ai noai indentation automatique
autoprint ap ap affiche la ligne après c, d, j, m, :s, t, u
autowrite aw noaw sauve automatiquement le texte
directory dir dir=/tmp emplacement du tampon disque
errorbells eb noeb sonne lors des messages d’erreur
hardtabs ht ht=8 position des tabulateurs du terminal
ignorecase ic noic maj/min indifférenciées p. recherche
lisp nolisp modifie ( )[ ]{ } pour codage en lisp
list nolist affiche tabulations et fins de lignes
magic magic étend car. spéciaux en recherche
mesg mesg laisse passer les messages write write
number nu nonu numérote les lignes
open open autorise open avec vi
optimize opt opt supprime retour chariot automatique
prompt prompt invite : en mode ligne de cmd
readonly ro noro interdit la modification du fichier
remap remap autorise macros dans des macros
report report=10 taille maxi. modifications notifiées
scroll scroll=11 nombre de lignes pour C-d et z
shell sh sh=$SHELL nom du shell pour ! et :sh
shiftwidth sw sw=8 nombre d’espaces pour indenter
showmatch sm nosm indique le séparateur associé ( )[ ]{ }
slowopen slow slow retarde l’affichage lors des insertions
tabstop ts ts=8 taille des tabulations C-i C-i
taglength tl tl=0 taille minimum pour génération de tags
(0 = pas de limite, v. ctags ctags )
tags « tags /usr/lib/tags » emplacement du fichier de tags
term term=$TERM nom du terminal utilisé
terse noterse messages d’erreurs raccourcis
timeout to noto 1s maxi. pour taper une macro
warn – warn « changements non enregistrés »
window window=n nombre de lignes de la fenêtre texte
wrapmargin wm wm=0 retour automatique a n caractères de la marge droite
wrapscan ws ws les recherches à la fin du texte recommencent au début
writeany wa nowa pas de vérification de droits d’accès

Configuration au démarrage:

Les directives :set et :map d’un utilisateur peuvent être réunies dans le fichier $HOME/.exrc. Il ne faut pas de « : » dans ce cas.

On peut aussi les mettre dans la variable d’environnement EXINIT. Par exemple: export EXINIT= »set noautoindent aw showmatch » avec bash bash

Index [Table des matières]