Previous Up Next

 

Des commandes plus pointues

Pour se déplacer dans le fichier, on peut utiliser :

  • h ou flèche gauche : pour aller au caractère à gauche
  • j ou flèche bas : pour descendre à la ligne suivante
  • k ou flèche haut : pour remonter à la ligne précédente
  • l ou flèche doite : pour aller au caractère à droite
  • 0 ou home : pour aller en début de ligne
  • $ ou end : pour aller en fin de ligne
  • ^ : pour aller sur le premier caractère non-blanc de la ligne courante
  • w (word) : déplacement au début du prochain « petit » mot (un « petit » mot consiste en une suite ininterrompue de caractères alphanumétiques ou de caractères de ponctuation, mais pas un mélange de caractères de ponctuation et alphanumériques)
  • W : déplacement au début du prochain « grand » mot (mélange alphanumérique et ponctuation)
  • b (back) : retour au début d'un « petit » mot
  • B : retour au début d'un « grand » mot
  • e : déplacement à la fin d'un « petit » mot
  • E : déplacement à la fin d'un « grand » mot
  • fx (forward x) : pour aller au prochain caractère "x"
  • Fx : fait la même chose que fx, mais en reculant vers la gauche pour trouver le caractère "x"
  • tx : pour aller au caractère précédant le prochain caractère "x"
  • Tx : fait la même chose que tx, mais vers la gauche
  • G : sert à se déplacer à la dernière ligne du fichier
  • :x : pour se déplacer à la ligne x (paramètre numérique x)
  • ctrl+f : pour se déplacer d'un écran vers le bas
  • ctrl+b : pour se déplacer d'un écran vers le haut
  • ctrl+d : déplacement vers le bas d'un demi-écran
  • ctrl+u : déplacement vers le haut d'un demi-écran
  • % (sur une parenthèse) : pour se déplacer sur la parenthèse correspondant à la paire (ouverture-fermeture). Très utile lorsqu'on programme en C, et surtout dans des langages fonctionnels, connus pour leur utilisation massive des parenthèses.
  • { ou } : pour se déplacer au bloc précédent ou suivant. La notion de bloc varie selon le type de fichier édité. C'est par exemple un paragraphe en HTML, ou le corps d'une fonction en langage C.
  • n| : Déplacement sur la colonne n de la ligne courante
  • + return : déplacement sur le premier caractère non-blanc sur la même ligne
  • - : déplacement sur le premier caractère non-blanc de la ligne précédente
  • ) : déplacement sur la fin d'une phrase (une phrase se termine soit par une ligne blanche, ou un point ou une marque d'exclamation suivis par deux caractères d'espace ou la fin de la ligne. Un point ou une marque d'exclamation suivis par un seul caractère d'espace ne termine pas une phrase ; ceci est un comportement correct, en accord avec les règles traditionnelles de la manière dont les phrases doivent apparaître dans les documents imprimés, mais apparaît souvent comme faux pour ceux qui n'ont jamais utilisé une classe typographique correcte.) NdT : Ceci n'est valable qu'en typographie anglaise. En typographie française, une phrase se termine par un point (ou une marque d'exclamation) suivit par une espace.
  • ( : déplacement au début d'une phrase
  • H : déplacement vers la position première (la ligne du haut) de l'écran
  • M : déplacement au milieu de la ligne à l'écran
  • L : déplacement sur la dernière ligne de l'écran
  • nG : déplacement sur la ligne n. Si n n'est pas donné, déplacement sur la dernière ligne du fichier
  • /toto : recherche l'occurence "toto" dans le texte (on utilise ensuite la touche "n" pour passer au suivant)
  • ?toto : recherche en arrière l'occurence "toto" dans le texte (on utilise ensuite la touche "N" pour passer au précédent)

La plupart des commandes de mouvements présentées ci-dessus peuvent être précédées d'un compteur de répétitions ; le mouvement est simplement répété le nombre de fois donné :

  • 3w : déplacement en avant de 3 mots
  • 5k : déplacement vers le haut de 4 caractères
  • 3fa : trouve le 3ème « a » successif de la ligne courante
  • 6+ : descend de 6 lignes

Effacer du texte :

  • dw : efface le prochain « petit » mot
  • d3w : efface les 3 prochains « petits » mots
  • 3dw : trois fois, efface le prochain « petit » mot
  • 3d3w : trois fois, efface les 3 prochains « petits » mots (c'est-à-dire, efface les 9 prochains « petits » mots)
  • d+ : efface la ligne actuelle et la ligne suivante
  • d/the : efface à partir du caractère courant jusqu'à, mais sans inclure, la prochaine apparition de « the »
  • d$ : efface jusqu'à la fin de la ligne
  • d0 : efface jusqu'au début de la ligne
  • d30G : Efface la ligne courante jusqu'à et incluant la ligne 30
  • dG : efface la ligne courante jusqu'à et incluant la dernière ligne
  • d1G : efface la ligne courante jusqu'à et incluant la ligne 1
  • 15x : efface le caractère courant et les 14 suivants.

Changer le texte :

  • cw : change le mot
  • 3cw : change trois mots
  • cc : change la ligne courante
  • 5cc : change cinq lignes (courante et quatre suivantes)
  • c/the : changer du caractère courant jusqu'à, mais sans inclure, la prochaine occurence de « the »
  • c$ : change jusqu'à la fin de la ligne
  • c30G : change de la ligne courante jusqu'à la ligne 30 incluse
  • cG : changer de la ligne courante jusqu'à et incluant la dernière ligne
  • c1G : changer la ligne courante jusqu'à la ligne 1 incluse

Copier du texte

  • yy : copie la ligne courante
  • 5yy : copie la ligne courante et les 4 lignes suivantes
  • y3w : copie 3 mots
  • y$ : copie jusqu'à la fin de la ligne
  • y1G : copie de la ligne courante jusqu'à la ligne 1 incluse
  • p : colle les données copiées après le curseur
  • P : colle les données copiées au-dessus du curseur

Substitution

  • :1,$s/the/THE/g de la ligne 1 à la dernière ligne (ligne $), remplace le texte « the » par « THE » ; le fais globalement pour toute ligne où se trouve un « the »
  • :'a,.s/.*/ha ha/ de la ligne marquée a jusqu'à la ligne actuelle (ligne .), substitue tout ce qu'il y a sur la ligne par le texte « ha ha »

Diverses commandes

  • :w Écrit le contenu du tampon dans le fichier sans quitter VI
  • :w abc Écrit le contenu du tampon dans le fichier abc (crée abc s'il n'existe pas, ou réécrit son contenu actuel s'il existe) sans quitter VI
  • :1,10w abc Écrit les lignes 1 à 10 dans le fichier abc
  • :'a,$w abc Écrit de la ligne marquée a jusqu'à la dernière ligne dans le fichier abc
  • :e abc Édite le fichier abc, au lieu du fichier actuel. VI affiche un message d'erreur si des changements ont été faits au fichier actuel et qui n'ont pas été sauvés avec :w
  • :e # Édite le fichier précédemment édité (des commandes successives :e# vont et viennent entre deux fichiers)
  • :f abc Change le nom du fichier pour le tampon actuel vers abc
  • :q Quitte, à moins qu'il n'y ait des changements que vous ayez faits
  • :q! Quitte, en omettant tous les changements que vous pourriez avoir fait
  • :r abc Lit le fichier abc dans le tampon vi actuel, après la ligne sur laquelle se trouve le curseur (essayez :r croc pour insérer une copie du fichier croc)
  • :!cmd Exécute la commande cmd (who, sort, ls, etc.)

Filtrer le texte
La commande de filtrage ! demande le nom d'une commande UNIX (qui doit être un filtre), passe les lignes sélectionnées par ce filtre, en remplaçant les lignes sélectionnées dans le buffer vi avec la sortie de la commande filtrante. La capacité de vi à passer des parties arbitraires de texte au travers de tout filtre UNIX ajoute une flexibilité incroyable à vi, sans « coût supplémentaire » de taille ou de performance à vi même.
Quelques exemples peuvent aider l'illustration. Créez une ligne dans votre fichier contenant juste le mot « who » et absolument aucun autre texte. Placez le curseur sur cette ligne, et tapez !!. Cette commande est analogue à dd, cc, ou yy, mais au lieu d'effacer, de changer ou de copier la ligne courante, elle filtre la ligne courante. Lorsque vous pressez le second !, le curseur descend vers le coin en bas à gauche de l'écran et un simple ! est affiché, vous demandant d'entrer le nom d'un filtre. En tant que nom de filtre, tapez « sh » et pressez la touche Entrée. sh (le shell Bourne) est un filtre ! Il lit l'entrée standard, exécute une partie de l'entrée (c'est-à-dire qu'il exécute des commandes), et envoie sa sortie (la sortie de ces commandes) à la sortie standard. Filtrer la ligne contenant « who » au travers de « sh » remplace la ligne contenant « who » par la liste des utilisateurs du système courant -- directement dans votre fichier !
Essayez de répéter ce procédé avec date. C'est-à-dire, créez une ligne ne contenant rien d'autre que le mot date, puis placez le curseur sur cette ligne, et tapez !!sh et la touche Entrée. La ligne contenant date est remplacée par la sortie de la commande date.
Mettez votre curseur sur la première ligne de la sortie de « who ». Comptez le nombre de lignes. Supposons, par exmple, que ce nombre soit six. Sélectionnez alors ces six lignes à filtrer au travers de sort ; tapez 6!!sort et la touche Entrée. Les six lignes seront passées à sort, et la sortie de sort remplacera les six lignes d'origine.
La commande filtre peut uniquement être utilisée sur des lignes complètes, pas sur des caractères ou des mots.
Quelques autres commandes de filtres (ici, « CR » indique pressez Entrée) :

  • !/the CR sort CR : sort la ligne courante jusqu'à la ligne suivante contenant « the » incluse
  • !1Ggrep the CR : remplace la ligne courante jusqu'à la ligne 1 incluse par les lignes contenant « the »
  • !Gawk '{print $1}' CR : de la ligne courante jusqu'à la fin du fichier, remplace chaque ligne par son premier mot

Marquer des lignes et des caractères
Vous pouvez marquer des lignes et des caractères pour être utilisés en tant que cible pour des mouvements, effacement, changement, copie, et filtration en utilisant la commande mc, où c est une lettre minuscule.
Par exemple, mettez le curseur au milieu d'un mot et tapez ma. Ceci marque le caractère sous le curseur sous la marque a.
Maintenant, déplacez le curseur en dehors du caractère marqué vers une ligne différente (utilisez les flèches curseur, CTRL-u, ou autre). Pour retourner à la ligne marquée, tapez 'a (c'est-à-dire apostrophe, puis a). Ceci vous place sur le premier caractère non-blanc de la ligne contenant la marque a.
Sortez de la ligne encore une fois. Pour retourner au caractère marqué, tapez `a (apostrophe inverse, puis a). Ceci vous déplacera sur le caractère marqué par a.
Le marquage est habituellement utilisé avec l'effacement, le changement, la copie ou la filtration. Par exemple, déplacez le curseur sur une autre ligne que celle contenant la marque a, et pressez d'a (d, apostrophe, a). Ceci efface de la ligne courante jusqu'à la ligne marquée a incluse.
Mettez le curseur au milieu d'un autre mot et tapez mb pour mettre la marque b. Maintenant, déplacez le curseur hors de ce mot (mais seulement de quelques lignes, ainsi vous pourrez voir ce que nous allons faire plus facilement), et pressez d`b (d, apostrophe inverse, b). Ceci efface le caractère courant jusqu'au caractère marqué par b inclus.
Comme autre exemple, pour trier la sortie de who, marquez la première ligne (ma), puis déplacez le curseur vers la dernière ligne et taper !'asort puis la touche Entrée.
Si vous sautez jusqu'à une marque et que vous décidez de revenir en arrière, de l'endroit d'où vous avez sauté, vous pouvez taper '' (reviens à la ligne) ou `` (reviens au caractère).

Nommer les tampons
Lorsque vous effacez, modifiez, ou copier du texte, le texte original est sauvé (jusqu'au prochain effacement, changement ou copie) dans un tampon non nommé à partir duquel il peut être mis en utilisant p ou P. En utilisant le tampon non nommé, seul le plus récent changement du texte peut être récupéré.
Si vous voulez effacer, changer ou copier plusieurs parties de texte et se souvenir de toutes (jusqu'à un maximum de 26), vous pouvez donner un nom au tampon avec la commande utilisée. Un nom de tampon est de la forme "c (double apostrophe, c minuscule).
Par exemple, tapez "ayy pour copier la ligne courante dans le tampon a, puis déplacez vous sur une autre ligne et tapez "byy pour copier cette ligne dans le tampon b. Maintenant, déplacez vous n'importe où dans le fichier et tapez "ap et "bp pour placer des copies du texte sauvé dans les tampons a et b.
Quelques autres commandes de tampon :

  • "a6yy : Copie 6 lignes (courante et 5 suivantes) dans le tampon a.
  • "bd1G : Efface de la ligne courante jusqu'à la ligne 1 incluse, en sauvant les lignes effacées dans le tampon b. "cy'c : Copie de la ligne courante jusqu'à la ligne marquée c dans le tampon c (les marques et les tampons sont distincts, et peuvent avoir le même nom sans que vi ne s'en préoccupe).

version texte imprimable

copyright jOas 2003

Optimisé pour Netscape Communicator 4.51