Manuel de l'Utilisateur Expérimenté Solaris

Recherche et remplacement avec vi

Il existe plusieurs façons de localiser une chaîne de caractères donnée dans un fichier avec vi, qui offre notamment une fonction de remplacement systématique très performante.

Recherche d'une chaîne de caractères

Une chaîne de caractères est composée d'un ou de plusieurs caractères consécutifs. Elle peut contenir des lettres, des chiffres, des signes de ponctuation, des caractères spéciaux, des espaces, des tabulations ou des retours chariot. Il peut s'agir d'un mot grammatical ou d'une partie de mot.

Pour rechercher une chaîne de caractères, tapez / suivi de la chaîne recherchée et appuyez sur Return. vi positionne le curseur sur la première occurrence de la chaîne trouvée. Par exemple, pour rechercher la chaîne "meta", tapez /meta et appuyez sur Return.

Tapez n pour passer à l'occurrence suivante de la chaîne ou N pour passer à l'occurrence précédente.

Pour effectuer une recherche en arrière dans un fichier, vous pouvez utiliser ? à la place de /. Dans ce cas, les directions n et N sont inversées.

Normalement, les commandes de recherche font la distinction entre majuscules et minuscules : une recherche du mot "chine" ne trouvera pas le mot "Chine." Pour éviter cette distinction, tapez :set ic. Pour revenir au mode par défaut, qui distingue les majuscules des minuscules, tapez :set noic.

Si vi trouve la chaîne recherchée, le curseur s'arrête à la première occurrence de cette dernière. Dans le cas contraire, vi affiche le message : Expression introuvable sur la dernière ligne de l'écran.

Certains caractères spéciaux ( / & ! . ^ * $ \ ?) ont une signification particulière pour le processus de recherche et doivent être «despécialisés» lorsqu'ils sont utilisés pour une recherche. Pour despécialiser un caractère spécial, faites-le précéder d'une barre oblique inversée (\). Par exemple, pour rechercher la chaîne "d'accord ?", tapez /d'accord\? et appuyez sur Return.

Etant donné que ces caractères spéciaux peuvent être interprétés comme des commandes par la fonction de recherche, vous devez indiquer qu'ils sont à inclure dans la chaîne recherchée en les faisant précéder d'une barre oblique inversée. Pour despécialiser une barre oblique inversée, tapez \\.

Affinement de la recherche

Vous pouvez affiner la recherche en associant à la chaîne des indicateurs signalant les états suivants :

Pour que la chaîne soit recherchée en début de ligne, faites-la précéder d'un caret (^). Par exemple, pour rechercher la prochaine ligne commençant par "Rechercher", tapez :

/^Rechercher

Pour que la chaîne soit recherchée en fin de ligne, faites-la suivre d'un symbole dollar ($). Par exemple, pour rechercher la prochaine ligne se terminant par "rechercher.", tapez :

/rechercher\.$

(Le point est despécialisé par la barre oblique inversée.)

Pour que la chaîne recherchée corresponde au début d'un mot, faites-la précéder de \< , et pour qu'elle corresponde à la fin d'un mot, faites-la suivre de \>. Ainsi, pour que la chaîne recherchée corresponde à un mot plutôt qu'à une chaîne, combinez les deux indicateurs de début et de fin de mot dans les attributs de la recherche. Par exemple, pour trouver la prochaine occurrence du mot (par opposition à la chaîne) "rechercher", tapez :

/\<rechercher\>

Pour remplacer une partie de la chaîne recherchée par n'importe quel caractère, tapez un point (.) dans la chaîne, à l'emplacement à partir duquel la concordance de caractères doit être trouvée. Par exemple, pour trouver la prochaine occurrence de "pain" ou "main", tapez :

/.ain

Comme il s'agit d'une recherche de chaîne et non de mot, ce modèle de recherche peut également trouver les occurrences de "pains" ou "mains".

Pour rechercher des variantes de caractères dans une chaîne, placez les variantes entre crochets. Le schéma de recherche /[pm]chaîne permettra de trouver les chaînes commençant soit par p, soit par m. D'autre part, /[m-p]chaîne permettra de trouver les chaînes commençant par une lettre de l'alphabet comprise entre m et p.

Pour que la chaîne recherchée corresponde à zéro, une ou plusieurs occurrences du dernier caractère, tapez un astérisque (*) dans la chaîne. Vous pouvez combiner les crochets et l'astérisque pour trouver des variantes déterminées. Par exemple, pour trouver toutes les chaînes commençant par une lettre de l'alphabet et se terminant par "information" et pour trouver toutes les occurrences de la chaîne "information", tapez :

/[a-z]*information

Remplacement d'une chaîne de caractères

La procédure de remplacement d'une chaîne de caractères repose sur le même principe que les procédures de recherche précédemment décrites. Toutes les concordances de caractères utilisées dans la fonction de recherche peuvent être également utilisées dans la fonction de recherche-remplacement.

Pour remplacer une chaîne de caractères, tapez :

:g/chaîne_recherchée/s//chaîne_ remplacement/g

et appuyez sur Return.

Pour remplacer toutes les occurrences de la chaîne "pain" par la chaîne "main", tapez :

:g/pain/s//main/g

et appuyez sur Return.

Vous pouvez modifier cette commande de telle sorte que vi interrompe la recherche et vous demande de confirmer le remplacement de chacune des occurrences. La commande suivante utilise gc (où c correspond à "confirmer"). Dans cette commande, vi s'arrête à chaque occurrence de "pain" et vous demande de confirmer le remplacement. Répondez par y pour oui ou par n pour non.

:g/pain/s//main/gc


Remarque :

vous pouvez annuler toute opération de recherche-remplacement avec demande de confirmation en appuyant sur Ctrl-C.


Passage à une ligne donnée

Pour passer à la dernière ligne d'un fichier ouvert, tapez G. Pour revenir à la première ligne, tapez 1G.

Vous pouvez accéder à n'importe quelle autre ligne en tapant le numéro correspondant, suivi de G.

Par exemple, si vous quittez le fichier paint lorsque la ligne 51 est en cours d'édition, vous pouvez réaccéder à cette ligne lors de l'ouverture du fichier en tapant 51G.