Dans Emacs, la marque a d’autres usages que la simple sélection. L’autre utilité majeure de la marque est le déplacement. Un certain nombre de commandes de navigation (recherche, déplacements sur de longues distances,
etc.) déposent la marque à l’endroit où vous vous trouviez avant l’action. Si c’est le cas, un petit message vous en informe, dans le
minibuffer. Vous pouvez ainsi compter sur
C-x C-x pour retourner à votre position précédente. Essayez, par exemple, la commande
M-< suivi de la commande
C-x C-x. Voici quelques commandes usuelles qui placent la marque :
| M-< |
début de buffer |
| M-> |
fin de buffer |
| C-s |
recherche |
| C-M-s |
recherche (avec des expressions régulières) |
| C-r |
recherche en arrière |
| C-M-r |
recherche en arrière (avec des expressions régulières) |
Cette astuce est suffisante pour aller d’un bout à l’autre du
buffer tant que vous ne changez pas la position de la marque, ce qui n’est guère pratique pour l’édition. Mais comme Emacs est bien fait, il existe un historique des positions auxquelles vous avez placé la marque : c’est le
mark ring. La commande servant à parcourir la liste est la même que celle pour poser la marque, mais avec un préfixe, c’est-à-dire
C-u C-SPC. Elle vous téléporte au dernier endroit où vous avez posé la marque. Son usage répété déroule toute la liste.
Comme il est fastidieux de taper
C-u C-SPC tout le temps pour aller là où vous voulez, la variable
set-mark-command-repeat-pop existe. Donnez lui une valeur autre que
nil (généralement
t ; voir
mon article sur la configuration pour savoir comment changer la valeur d’une variable), et vous pourrez abréger la commande en simplement
C-SPC, à partir de la seconde fois consécutive (la première doit comporter le préfixe afin de la distinguer de la commande normale de marquage).
Il existe aussi un
global mark ring qui sauvegarde la marque la plus récente dans chaque
buffer visité, dans l’ordre de leur visite. Cela vous permet d’aller d’un
buffer à l’autre tout en suivant la marque. Je ne fais pas grand usage de ce mécanisme, mais peut-être y trouverez-vous un intérêt. La commande est
C-x C-SPC et est l’analogue de
C-u C-SPC pour le
global mark ring.
Une bonne habitude, selon moi, est de placer la marque quelque part, lorsque vous voulez effectuer une opération sur une autre partie du buffer, temporairement, puis revenir à votre travail « principal » ensuite. Si vous avez deux zones d’édition d’égale importance et fréquence, préférez les registres (qui ne sont pas le sujet de cet article, cependant).
En résumé :
| C-x C-x |
échange la marque et le point (rappel) |
| C-u C-SPC |
parcourt l’historique des marques |
| C-x C-SPC |
parcourt l’historique global des marques |
Restriction de portée avec la région
Au-delà du copier / coller, la région a comme autre principal usage la restriction de la portée de certaines commandes. Dans cette optique, il faut distinguer les commandes spécifiquement prévues pour un usage avec la région de celles qui agissent habituellement sur tout le
buffer mais peuvent être limitées à une zone particulière.
Les premières ont très souvent des noms qui comportent le mot
region, par exemple :
comment-region. En vérité, les commandes
C-w et
M-w vues précédemment font partie de cette catégorie. En voici quelques unes dignes d’intérêt :
| C-M-\ (ou M-x indent-region) |
indente la région |
| M-x comment-region |
commente la région |
| M-x uncomment-region |
décommente la région |
La seconde catégorie repose sur la notion de
région active. Par défaut, la région est passive : les commandes ne sont pas affectées par sa présence. En effet, comme nous avons vu dans la section précédente, il est courant de laisser traîner la marque à des fins de repérage et de déplacement, et il serait dérangeant que toutes les opérations se restreignent à cette zone. Il existe plusieurs manières d’obtenir une région active. Je vais en décrire deux, sans doute les plus faciles à mettre en œuvre. Tout d’abord, si vous avez déjà marqué une région et souhaitez la rendre active, tapez
C-u C-x C-x. Si au contraire, vous voulez sélectionner une région active à partir du point jusqu’à une autre position, au lieu de déposer la marque comme d’habitude avec
C-SPC, faites plutôt
C-SPC C-SPC : en plus d’apposer la marque, cette commande active la région entre celle-ci et le point. Une fois l’activation effectuée, vous pouvez vous déplacer pour l’agrandir ou la rétrécir, le surlignement vous rappelle qu’elle est bien active.
C-g annule ce mode et retourne la région à son état passif.
Les commandes les plus importantes travaillant sur la région active sont sans doute les commandes de remplacement, interactives (
M-% et
C-M-% (avec des expressions régulières)) ou non interactives (
replace-string et
replace-regexp). Aussi, la commande d’insertion de commentaires (
M-;) se transforme en
comment-region si la région est active. Du reste, regardez s’il est fait mention de la région active, dans la description des fonctions, pour repérer celles qui tiennent compte de ce mécanisme.
En résumé :
| C-u C-x C-x |
active la région actuelle |
| C-SPC C-SPC |
pose la marque et active la région |
| C-g |
retourne la région au mode passif |
| M-% |
remplacement interactif |
| C-M-% |
remplacement interactif avec des expressions régulières |
| M-x replace-string |
remplacement |
| M-x replace-regexp |
remplacement avec des expressions régulières |
| M-; |
insère un commentaire ou commente la région active |