L'éditeur Vi

Rédigé par niconux Aucun commentaire
Classé dans : Mémo Mots clés : vi, éditeur, commande

vi est un éditeur de texte en mode texte plein écran écrit par Bill Joy en 1976 sur une des premières versions de la distribution Unix BSD.

Il est présent d'office sur la majorité des systèmes Unix actuels, souvent sous la forme d'un clone du logiciel vi originel.

Dans cet article, après une brève description du mode de fonctionnement, nous allons détailler les commandes les plus souvent utilisées.

Voyons tout ceci plus en détail.

Mode de fonctionnement

vi est un éditeur modal, c'est-à-dire que la signification des boutons et des touches change selon le mode dans lequel il se trouve.

En mode insertion, le texte tapé est inséré dans le document. Appuyer sur la touche Echap depuis le mode insertion permet de passer dans le mode commande, dans lequel les touches correspondent à des déplacements du curseur ou à des fonctions d'édition. Par exemple, j descend le curseur d'une ligne, x efface le caractère sous le curseur (la position « sous le curseur » peut désigner la droite du curseur si ce dernier se place entre les caractères, au-dessus du caractère de soulignement ou sous le bloc rectangulaire, selon la manière dont le terminal représente le curseur).

Les touches tapées en mode commande ne sont pas insérées dans le texte, ce qui est une cause fréquente de confusion pour les utilisateurs débutants avec vi.

En mode commande, de nombreuses opérations peuvent être effectuées en série avec des séquences de touches simples, sans qu'il soit nécessaire de maintenir les touches Alt ou Ctrl enfoncées. Les opérations les plus élaborées sont composées d'opérations plus primaires. Par exemple, d3w efface trois mots (d pour delete (effacer) et w pour word (mot), c2fa change (change) le texte jusqu'à ce qu'il trouve (find) le second (2) a. Pour les utilisateurs expérimentés, cela permet de travailler très efficacement. Cela permet également à l'utilisateur de conserver en permanence ses mains sur le clavier.

Revenir au début de l'article

Introduction aux commandes vi

Appel de vi

L'appel de vi s'effectue selon l'une des trois syntaxes suivantes :

  • vi [options] fichier
  • vi [options] -t tag
  • vi [options] -e [fichier_erreurs]

 

Options

Les options doivent toujours précéder le ou les noms de fichiers.

-t tag

Le fichier à éditer et la position du curseur dépend d'un tag (d'une marque), une sorte de label de goto. Le tag est recherché dans le fichier des tags.

-e fichier_erreurs

Démarre en mode réparation rapide. Le fichier fichier_erreurs est lu et la première erreur est affichée. Voir la commande ":help quickfix".

+[num]

Pour le premier fichier, le curseur est positionné sur la ligne num. Si num est absent, il est positionné sur la dernière ligne.

+/{motif}

Pour le premier fichier, le curseur est positionné sur la première occurence de motif. Voir ":help search_pattern".

+{commande}, -c commande

La commande est exécutée lorsque le premier fichier a été lu. Elle est interprété comme une commande ex.

-b

Mode binaire. Permet l'édition d'un fichier binaire ou exécutable.

-i viminfo

Définit le fichier viminfo à utiliser à la place de celui par défaut (~/.viminfo).

-g

Cette option active l'interface graphique si vi a été compilé avec le support d'une interface graphique (GUI).

-H

Permet l'édition de fichiers dont le texte est orienté de droite à gauche, si vi a été compilé avec l'option RIGHTLEFT.

-n

N'utilise pas de fichier d'échange (swap). La récupération après un crash devient alors impossible. N'est utile que pour un système sous dimensionné en espace disque.

-o[N]

Ouvre N fenêtres. Lorsque N est omis ouvre une febêtre par fichier.

-r

Liste les fichiers d'échange et les informations permettant de les récupérer.

-r fichier

Mode récupération. Le fichier d'échange fichier est utilisé pour récupérer une session d'édition perdue lors d'un crash. Voir la commande ":help recovery".

-r scriptin

Lit le fichier scriptin. Les caractères sont interprétés comme s'ils avaient été saisis. La commande :source! {scriptin} est équivalente.

-T terminal

Donne à vi le nom du terminal utilisé

-u vimrc

Utilise les commandes du fichier vimrc pour l'initialisation. Toutes les autres initialisations sont annulées.

-v

Mode vue. L'option lecture seule est activée. L'édition est possible mais le fichier est protégé contre un écrasement accidentel. L'utilisation du point d'exclamation permet néanmoins le sauvegarde.

-w scriptout

Tous les caractères saisis sont écrits dans le fichier scriptout jusqu'à la sortie de vi. Permet de créert un script lu par la commande vi -s ou :source!

-W scriptout

Comme -w mais le fichier existant est écrasé.

--

Marque la fin des options. Les arguments suivants sont considérés comme des noms de fichiers pouvant commencer par un tiret.

Les modes vi

  • Le mode commande

Le mode commande est actif dès après l'appel. On peut alors :

- activer le mode insertion

- lancer des commandes d'édition du texte

- déplacer le curseur dans le fichier

- appeler des commandes ex

- lancer un shell Linux

- sauvegarder le fichier ou quitter l'éditeur

  • Le mode insertion

La saisie de texte se fait en mode insertion. On quitte le mode insertion et passer en mode commande en pressant la touche ECHAP. Les commandes suivantes permettent de passer en mode insertion en précisant l'endroit où effectuer l'insertion.

a : insertion après le curseur.

A : Insertion en fin de ligne.

c : Début d'une opération de remplacement.

C : Remplacement jusqu'en fin de ligne.

i : Insertion avec le curseur.

I : Insertion en début de ligne.

o : Insertion à la ligne suivante;

O : Insertion à la ligne précédente.

R : Active le mode écrasement.

s : Remplace un caractère.

S : remplace une ligne entière.

Syntaxes des commandes vi

Les commande vi obéissent à la syntaxe générale suivante :

[n] opérateur [m] objet

Les opérateurs principaux sont :

c : Remplacement

d : Effacement/Suppression

y : Collage (ou copie)

Si l'opération doit se dérouler sur la ligne active, l'opérateur est identique à l'objet : cc, dd, yy. Sinon l'opéateur agit sur des objets spécifiés par les commandes de déplacement du curseur ou par des expressions rationnelles. n et m sont des préfixex indiquant le nombre de fois que l'opération doit être exécutée ou sur combien d'objets. Si n et sont tous deux spécifiés, le résultat est n x m.

Un objet peut représenter l'un ou l'autre de ces éléments de texte :

mot

Tous les caractères jusqu'au prochain espace ou signe de ponctuation. Un objet dont la première ligne est en majuscules ne reconnaît que les caratères d'espacement.

phrase

Tous les caractères jusqu'au prochain ., !, ?, suivi de deux espaces.

paragraphe

Tous les caractères jusqu'à la prochaine ligne vierge, ou selon la définition d'un paragraphe telle que spécifiée par l'opérateur para=.

section

Tout le texte jusqu'au prochain en-tête de section, tel que spécifié par l'opérateur sect=.

Exemples :

2cw : Remplace les deux prochains mots

d} : Efface jusqu'au prochain paragaphe.

d^ : Efface jusqu'au début de la ligne.

5yy : Copie les cinq prochaines lignes

y]] : Copie tout jusqu'à la prochaine section.

Travail avec la ligne d'état

On utilise la ligne d'état, en bas de la fenêtre vi, pour appeler les commandes suivantes :

/

Recherche d'un motif vers l'avant.

?

Recherche d'un motif vers l'arrière.

:

Appel d'une commande ex.

!

Appel d'une commande shell qui reçoit en entrée un objet tampon actif et le remplace par la sortie de la commande.

Les commandes appelées en ligne de commande sont lancées en pressant la touche ENTREE. Par ailleurs, les messages d'erreur et la sortie de la commande CTRL-g sont également afficés sur la ligne de commande.

Revenir au début de l'article

 

Commandes de déplacement

On précise le nombre de fois qu'une commande doit être exécutée en la préfixant du nombre souhaité. Les commandes de déplacement peuvent aussi servir d'objet pour des opérations de remplacement, d'effacement et de collage.

Caractères

h, j, k,l : Gauche, bas, haut, droite.

ESPACE : Droite

Texte

w, W, b, B : Début du mot suivant, du mot courant.

e, E : Fin du mot courant

), ( : Début de la phrase suivante/précédente.

}, { : Début du paragraphe suivant/précédent.

]], [[ : Début de la section suivante/précédente.

Lignes

0, $ : Début de ligne, fin de ligne

^ : Premier caractère autre qu'un espace dans la ligne.

+, - : Premier caractère de la ligne suivante/précédente.

ENTREE : Premier caractère de la ligne suivante.

n| : nième colonne de la ligne courante.

H : Première ligne de l'écran.

M : Ligne centrale de l'écran.

L : Dernière ligne de l'écran.

nH : n lignes en dessous de la première ligne de l'écran.

nL : n lignes au-dessus de la dernière ligne de l'écran.

Écrans

CTRL-f, CTRL-b : Avance/recule d'un écran.

CTRL-d, CTRL-u : Avance/recule d'un demi-écran.

CTRL-e, CTRL-y : Affiche une ligne supplémentaire.

z ENTREE : Repositionne la ligne active en haut de l'écran.

z. : Repositionne la ligne active au centre de l'écran.

z- : Repositionne la ligne active en bas de l'écran.

CTRL-l, CTRL-r : Redessine l'écran (sans déplacement).

Recherche

/motif : Recherche motif vers l'avant.

/ : Répétition de la recherche vers l'avant.

/motif/+n : Rallie à la nième ligne après motif

?motif : Recherche motif vers l'arrière.

?: Répétition de la recherche vers l'arrière.

?motif?+n : Rallie à la nième ligne avant motif.

n : Répète la dernière opération de recherche.

N : Répète la dernière opération de recherche dans la direction opposée.

% : Déplacement vers la parenthèse (ou le crochet, ou l'accolade) qui complète celle sur laquelle se trouve le curseur.

fx : Déplacement vers l'avant jusqu'à x sur la ligne courante.

Fx : Déplacement vers l'arrière jusqu'à x sur la ligne courante.

tx : Déplacement vers l'avant devant x sur la ligne courante.

Tx : Déplacement vers l'arrière derrière x sur la ligne courante.

, : Inverse la direction de recherche de la dernière commande f, F, t ou T.

; : Répète la direction de recherche de caractère (f, F, t ou T).

Numérotation de lignes

CTRL-g : Affiche des informations sur le fichiers courant.

nG : Rejoint la ligne n.

G : Rejoint la dernière ligne du fichier.

:n : Rejoint la ligne n.

Marquer sa place

mx : Marque la position actuelle du curseur avec le caractère x.

`x : (accent grave) Replace le curseur sur la marque x.

'x : (apostrophe) Place le curseur au début de la ligne contenant la marque x.

`` : (accents graves) Retourne à la marque précédente (ou à l'endroit précédant la dernière recherche).

'' : (apostrophes) Identique à la commande précédente, mais se positionne en début de ligne.

Revenir au début de l'article

 

Commande d'édition

On retiendra que les principaux opérateurs de saisie de texte sont c, d et y.

Saisie de texte

a : Insertion après le curseur

A : Insertion en fin de ligne

i : Insertion avant le curseur

I : Insertion en début de ligne

o : Insère une ligne vierge sous le curseur

O : Insère une ligne vierge au dessus du curseur

ESC : Met fin au mode insertion

TAB : Insère un caractère de tabulation

BACKSPACE : Recule d'un caractère

ENTREE : Passe à la ligne suivante

CTRL-j : Passe à la ligne suivante

CTRL-i : Insère un caractère de tabulation

CTRL-t : Déplacement sur le prochain taquet de tabulation

CTRL-d : Déplacement sur le prochain taquet de tabulation précédent.

CTRL-h : Recule d'un caractère

CTRL-u : Supprime la ligne suivante

CTRL-v : Insère le prochain caractère verbatim

CTRL-w : Recule d'un mot.

Ces quatre dernières commandes relèvent de stty  et peuvent par conséquent varier d'un terminal à l'autre.

Modification et suppression de texte

cw : Modifie le mot courant

cc : Modifie la ligne courante

C : Modifie le texte d'ici à la fin de la ligne

dd : Efface la ligne courante

ndd : Efface n lignes

D : Efface d'ici à la fin de la fin

dw : Efface le mot courant

d} : Efface jusqu'au début du paragraphe suivant.

d^ : Efface d'ici au début de la ligne

d/motif : Efface jusqu'à la première occurence de motif

dn : Efface jusqu'à la prochaine occurence de motif

dfa : Efface d'ici à a (y compris ce dernier) sur la ligne courante

dta : Efface d'ici à a (excluant ce dernier) sur la ligne courante

dL: Efface d'ici à la fin de l'écran

dG: Efface d'ici à la fin du fichier

p: Insère après le curseur la dernière portion de texte supprimée

P: Insère avant le curseur la dernière portion de texte supprimée

rx: Remplace le caractère courant par le caractère x

Rtexte: Remplace texte à partir du curseur

s: Remplace le caractère sous le curseur

ns: Remplace n caractères à partir de celui qui se trouve sous le curseur

S: Remplace toute la ligne active

u: Annule la dernière commande

U: Annule toutes les opérations effectuées sur la ligne courante

x: Supprime le caractère sous le curseur

X: Supprime le caractère qui précède le curseur

nX: Supprime les n caractères qui précèdent le curseur

. : Répète la dernière modification apportée au tampon

": Change la casse (minuscule/majuscule) de la lettre courante.

Copie et déplacement de texte

Y: Copie la ligne courante dans un nouveau tampon.

yy : Copie la ligne courante.

"xyy : Copie la ligne courante dans le tampon x.

"xd : Supprime la ligne courante et la met dans le tampon x

"Xd : Supprime la ligne courante et l'ajoute au tampon x

"xp: Insère le contenu du tampon x.

y]]: Copie le texte d'ici au début de la prochaine section.

ye: Copie jusqu'à la fin du mot courant.

Exemple : Un simple copier coller de la ligne courante se fera par la suite de commandes suivantes :

  • yy
  • p (à l'endroit désiré)

Revenir au début de l'article

 

Sauvegarder le travail et quitter vi

ZZ: Quitte vi, n'enregistrant le fichier que si l'on y a apporté des changements.

:x: Identique à ZZ

:w: Enregistre le fichier.

:wq: Enregistre le fichier et quitte vi

:w fichier : Enregistre le tampon sous le nom fichier

:n1,n2w fichier : Enregistre les lignes n1 à n2 sous le nom fichier.

:n1,n2w >> fichier : Ajoute les lignes n1 à n2 du tampon àfichier.

:w! : Enregistre le fichier (passant outre la protection du fichier courant)

:w! fichier : Enregistre le tampon courant sous le nom fichier et remplace tout autre fichier de même nom.

:q : Quitte vi.

:q! : Quitte vi sans enregistrer les dernières modifications au tampon courant.

Q : Passe de vi à ex

:vi : Retourne à vi après une commande Q

:e fichier2 : Edite fichier2  sans quitter vi

:n : Edite le prochain fichier.

:e! : Retourne à l'état du fichier courant lors du dernier enregistrement.

:e# : Edite l'autre fichier

% : Nom du fichier courant.

# : Nom de l'autre fichier.

Revenir au début de l'article

 

Travail simultané sur plusieurs fichiers

:e fichier : Edite un autre fichier fichier, le fichier courant devenant le deuxième fichier de travail.

:e! : Retourne à l'état du fichier courant lors du dernier enregistrement.

:e +  fichier : Commence l'édition à la fin de fichier

:e +n fichier : Ouvre fichier à la ligne n

:e # : Ouvre l'autre fichier à la dernière position occupée.

:ta  tag : Edite le fichier à la position tag.

:n : Edite le prochain fichier.

:n! : Impose le passage au fichier suivant.

:n fichiers : Permet de spécifier une nouvelle liste de fichiers.

CTRL-g: Affiche le nom du fichier courant et le numéro de la ligne courante.

:args : Affiche une liste des fichiers chargés dans l'éditeur.

:rew : Passe au premier des fichiers présentement chargés.

Revenir au début de l'article

Écrire un commentaire

Quelle est le septième caractère du mot q1fh8ltg ?

Fil RSS des commentaires de cet article