La recherche de texte sous Emacs (incremental search) est légèrement différente de celle que font la plupart des autres éditeurs. Sa particularité est qu'elle est incrémentale, c'est-à-dire qu'elle commence à rechercher du texte avant même que l'utilisateur ai fini de le taper. L'utilisateur voit ainsi la recherche se faire et s'affiner au fur et à mesure qu'il saisit une chaîne. Ce type de recherche est pénible sur les terminaux à rafraîchissement lent (ou par telnet), mais il existe d'autres fonctions de recherche plus traditionnelles qui ne réaffichent pas l'écran à chaque saisie de caractère. L'incremental search commence au niveau du point, et peut continuer au début du buffer si elle arrive à sa fin.
Commandes de recherche incrémentale de texte:
C-s
chaîne: recherche
incrémentale en avant
C-r
chaîne: recherche
incrémentale en arrière
Notons que si plusieurs occurrences d'un même texte se trouvent
dans un buffer, alors la recherche s'arrète à la
première. L'utilisateur peut accéder aux autres
occurrences en utilisant à nouveau la commande C-s
(ou
C-r
pour une recherche en arrière). La commande
C-s C-s
permet de faire une recherche sur la dernière
occurrence recherchée.
Emacs peut aussi rechercher une chaîne sans faire de recherche incrémentale, c'est à dire que le buffer sur lequel se fait la recherche ne subbira pas de raffraîchissement à chaque saisie de caractère.
C-s RET
chaîne: recherche la
chaîne chaîne de manière
non-incrémentale
C-r RET
chaîne: recherche la
chaîne chaîne en arrière de manière
non-incrémentale
Une expression régulière est une chaîne de caractères contenant des "caractères jokers", qui permettent chacun de remplacer un ou plusieurs autres caractères, comme le jeton blanc permet de remplacer d'autres caractères au scrabble. La recherche d'expressions régulières est une recherche puissante qui permet de rechercher à peu près n'importe quoi: adresses électroniques, prix, groupes de mots, ...
La recherche d'expressions régulières se fait
grâce à la commande C-M-s
(recherche en avant)
ou à la commande C-M-r
(recherche en
arrière). Leur utilisation est à peu de choses
près la même que celle des commandes C-s
et
C-r
. Le passage d'une occurrence à une autre se fait
par l'utilisation des commandes C-s
et C-r
respectivement.
Par exemple:
C-M-s [-a-zA-Z_\.]+@[-a-zA-Z0-9_\.]+\.\(fr\|com\|net\|org\)permet de rechercher la plupart des adresses électroniques.
Je conseille à qui voudrait en savoir plus sur les expressions régulières de se plonger dans le manuel d'Emacs à la section "Syntax of Regular Expressions" (environ cinq pages).
Il existe deux types de remplacement sous Emacs:
Il remplace toutes les occurrences d'une chaîne passée en argument à partir du point par une autre chaîne passée elle aussi en argument sans demander confirmation à l'utilisateur.
Les commandes de remplacement sont:
M-x replace-string
chaîne remplacement:
cette commande remplace sans confirmation toutes les occurrences de la
chaîne chaîne par la chaîne
remplacement.
M-x replace-regexp
regexp remplacement: cette
commande remplace sans confirmation l'expression
régulière regexp par la chaîne
remplacement.
La différence entre ce type de remplacement et le précéent est que le remplacement conditionnel demande confirmation à l'utilisateur pour chaque occurrence. Les commandes de remplacement conditionnel sont:
M-%
chaîne remplacement: cette commande
remplace toutes les occurrences de la chaîne
chaîne par la chaîne remplacement en
demandant confirmation à l'utilisateur.
M-x query-replace
chaîne remplacement:
cette fonction effectue la même tâche que la
précédente
M-x query-replace-regexp
chaîne
remplacement: cette commande remplace toutes les occurrences de
l'expression régulière regexp par la
chaîne remplacement en demandant confirmation à
l'utilisateur.y
: remplace l'occurrence par la chaîne de
remplacement et passe à la suivante
n
: ne modifie pas l'occurrence, mais passe à la
suivante
.
: remplace l'occurrence par la chaîne de
remplacement, mais arrête le remplacement sur cette occurrence
!
: remplace toutes les occurrences suivantes sans
demander confirmation
^
: revient à l'occurrence
précédente pour éventuellement y apporter des
corrections