[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ suivant ]


À la découverte de GNU Emacs
Chapitre 3 - Quelques commandes


Les commandes listées ci-dessous ne constituent bien entendu pas une liste exhaustive (se reporter aux GNU Emacs Manual et GNU Emacs Lisp Reference Manual pour une telle liste) et leurs descriptions sommaires ne sont là que pour guider le lecteur, l'orienter rapidement vers la commande qu'il recherche. Souvent, les commandes admettent des arguments optionnels qui offrent plus de possibilités que ce qui est décrit ici. Dans tous les cas, les références absolues sont l'aide en ligne d'Emacs (parfois un peu succincte mais le plus souvent très pratique) et les manuels sus-cités.

Dans les sections qui suivent, on trouvera des listes de la forme :

C-x C-f (find-file)

Ouvrir un fichier (...)

C-x C-s (save-buffer)

Enregistrer le buffer courant (...)

Cela se lit : « C-x C-f (Control-x puis Control-f, en gardant éventuellement la touche Control appuyée durant toute la séquence) est un raccourci clavier qui lance la commande find-file dont le rôle est (...). »


3.1 La base


3.1.1 L'aide

Toutes les séquences de touches standard liées à ces commandes commencent par le préfixe C-h (pour help).

C-h ? (help-for-help)

Lister les commandes d'aide

C-h a (command-apropos)

Donner une liste de commandes dont le nom contient la regexp[12] donnée par l'utilisateur.

C-h b (describe-bindings)

Afficher tous les bindings (liens entre les séquences de touches et les commandes qu'elles exécutent) disponibles dans le buffer courant (ils dépendent de son mode majeur et de ses éventuels modes mineurs — voir Modes majeurs et mineurs, Section 2.5).

C-h f (describe-function)

Décrire une fonction. Indispensable.

C-h i (info)

Active le buffer *info* dans lequel on dispose de documentation[13] au format hypertexte Info (voir Le mode Info, Section 4.2.3).

C-h k (describe-key)

Répondre à la question : « que fait cette séquence de touches ? ». Cela permet notamment de trouver le nom de la fonction lancée par une séquence bien connue (pour l'utiliser dans un programme ELisp par exemple).

C-h l (view-lossage)

Afficher les 100 derniers caractères tapés. Très utile quand on pense s'être emmêlé les pinceaux sans vraiment savoir ce qu'on a fait.

C-h m (describe-mode)

Afficher la documentation du mode majeur et des modes mineurs courants. Penser aussi à regarder dans le système Info (voir Le mode Info, Section 4.2.3).

C-h p (finder-by-keyword)

Trouver un package Emacs lié à un sujet donné.

C-h t (help-with-tutorial)

Pour ceux qui ne disposent pas de ce document. :-)

C-h v (describe-variable)

Donner la valeur courante et la documentation d'une variable. Cette commande précise également si la variable est locale au buffer courant. Indispensable.

C-h w (where-is)

Afficher les séquences de touches qui invoquent une commande dont on donne le nom. Plutôt utile.


3.1.2 Fichiers et buffers

C-x C-f (find-file)

Ouvrir un fichier dans un buffer du même nom (avec éventuellement un suffixe comme <2>, <3>, etc. s'il existe déjà un buffer portant ce nom).

C-x C-s (save-buffer)

Enregistrer le buffer courant dans un fichier. Si le buffer visitait déjà un fichier avant exécution de la commande (par exemple s'il avait été créé par C-x C-f), ce fichier est choisi d'office pour sauver le contenu du buffer, sinon la commande demande un nom de fichier.

C-x C-w (write-file)

Enregistrer le buffer courant dans un fichier (la commande demande le nom du fichier).

C-x C-v (find-alternate-file)

Ouvrir un fichier (demandé par la commande) et killer (tuer, fermer) le buffer courant. Très utile quand on se trompe de nom de fichier avec C-x C-f. Astuce : je m'en sers également pour mettre le nom (éventuellement avec le chemin d'accès) du fichier visité par le buffer courant dans le kill ring (« copier » le nom de ce fichier). Bien sûr, find-alternate-file ne fait rien elle-même quant au kill ring. Elle permet simplement d'avoir rapidement le nom du fichier dans un buffer.

Nous verrons également des variantes de C-x C-f : cf. Les buffers, Section 3.2, Les windows, Section 3.3 et Les frames, Section 3.4.


3.1.2.1 Rhhhaaa ! Emacs pollue les répertoires où il enregistre des fichiers !

Du calme. D'abord, retenez bien ces trois choses :

Emacs fait par défaut deux types de sauvegarde des fichiers.


3.1.3 Diverses

C-g (keyboard-quit)

Sortir de toute fonction qui s'exécute pour retourner au top-level (la boucle d'Emacs qui attend les événements — frappes de touches, déplacements de la souris, etc. — et agit en conséquence). Indispensable. C'est elle que vous utiliserez dès que vous vous serez trompé de fonction et que vous voudrez sortir du minibuffer (attendant une saisie dont vous n'avez que faire).

C-x C-c (save-buffers-kill-emacs)

Quitter Emacs après avoir demandé pour chaque buffer lié à un fichier qui a été modifié depuis sa dernière sauvegarde si on veut sauvegarder son contenu. Cette commande assez rarement utilisée. :-)[16]

C-x ESC ESC (repeat-complex-command)

Éditer et réexécuter la dernière commande complexe : en gros, la dernière commande ayant impliqué une saisie dans le minibuffer. Cela peut servir par exemple de raccourci pour le dernier M-x nom-à-rallonge-long-à-compléter exécuté.


3.2 Les buffers

Voir Buffers et fichiers, Section 2.4 pour la définition d'un buffer dans Emacs.

C-x b (switch-to-buffer)

Ouvrir un buffer existant ou créer un nouveau buffer lié (jusqu'à nouvel ordre) à aucun fichier (la commande demande le nom du buffer et permet la complétion pour les buffers existants).

C-x k (kill-buffer)

Killer (tuer, effacer) un buffer dont le nom est demandé par la commande.

M-x bury-buffer (bury-buffer)

mettre le buffer courant à la fin de la liste des buffers, de sorte qu'il devienne celui qui a le moins de chances d'être proposé par défaut si l'on exécute C-x b. Pratique lorsqu'on ne veut plus voir le buffer courant mais qu'on sait qu'on va en avoir à nouveau besoin un peu plus tard.

C-x C-b (list-buffers)

Lister tous les buffers existant dans la session Emacs courante.

Nous verrons également par la suite C-x 4 b (Commandes relatives à la other-window, Section 3.3.2) et C-x 5 b (Commandes relatives à la other-frame, Section 3.4.2).


3.3 Les windows

Voir Windows et frames, Section 2.6 pour la définition d'une window dans Emacs.


3.3.1 Commandes générales relatives aux windows

C-x 2 (split-window-vertically)

Diviser la window courante en deux parties l'une au-dessus de l'autre.

C-x 1 (delete-other-windows)

Faire disparaître toutes les windows de la frame courante sauf la window courante : elle occupe donc ensuite toute la frame.

C-x 0 (delete-window)

Efface la window courante (selected window) de la frame courante.

C-x o (other-window)

Se déplacer d'une window à l'autre au sein de la frame courante.

Comme la plupart des raccourcis clavier sous Emacs, ceux-ci sont assez faciles à mémoriser : 2 pour « 2 parties », 1 pour « 1 window » (restant dans la frame après exécution de la commande), 0 pour « disparition de la selected window », o pour « other ».


3.3.2 Commandes relatives à la other-window

Comme on (enfin, je !) utilise le plus souvent une ou deux windows par frame, la other-window est définie en général sans problème. Dans le cas au moins 3 windows divisent la frame courante, la other-window est définie me semble-t-il comme quelque chose du genre « la première obtenue en tournant dans le sens anti-horaire depuis la window courante ». Si cela vous traumatise de ne pas connaître la définition authentique de la other-window, plongez-vous dans le GNU Emacs Manual ou le GNU Emacs Lisp Reference Manual.

Les commandes relatives à la other-window sont accessibles en standard via le préfixe C-x 4.

C-x 4 b (switch-to-buffer-other-window)

Choisir un buffer (dont le nom est demandé par la commande) à afficher dans l'other-window.

C-x 4 C-f (find-file-other-window)

Ouvrir un fichier (dont le nom est demandé par la commande) dans un buffer affiché dans l'other-window.


3.4 Les frames

Voir Windows et frames, Section 2.6 pour la définition d'une frame dans Emacs.

Les commandes relatives aux frames sont accessibles en standard via le préfixe C-x 5.


3.4.1 Commandes générales relatives aux frames

C-x 5 2 (make-frame-command)

Créer une nouvelle frame.

C-x 5 0 (delete-frame)

Efface la frame courante.

C-x 5 o (other-frame)

Se déplacer d'une frame à l'autre au sein de la session Emacs courante.


3.4.2 Commandes relatives à la other-frame

Comme pour la other-window, le lecteur intéressé par une définition précise de la other-frame se reportera aux références que constituent le GNU Emacs Manual et le GNU Emacs Lisp Reference Manual.

C-x 5 b (switch-to-buffer-other-frame)

Choisir un buffer (dont le nom est demandé par la commande) à afficher dans une window de l'other-frame. Une nouvelle frame est créée s'il n'y en avait qu'une auparavant.

C-x 5 C-f (find-file-other-frame)

Ouvrir un fichier (dont le nom est demandé par la commande) dans un buffer affiché dans une window de l'other-frame. Une nouvelle frame est créée s'il n'y en avait qu'une auparavant.


3.5 Déplacements et édition


3.5.1 Déplacements

Si Emacs est configuré correctement[17], se déplacer au sein d'un buffer est très simple : les flèches et les touches habituelles (sur PC) Début (Home) et Fin (End) devraient fonctionner sans problème. Dans le cas contraire, si le problème vient de la configuration d'Emacs, jetez un oeil à Quelques idées pour votre fichier d'initialisation, Chapitre 6.

Il existe bien sûr quelques fonctions un peu plus évoluées et très pratiques pour se déplacer au sein d'un buffer :

C-left et/ou M-b (backword-word)

Déplacer le point vers le début du buffer de mot[18] en mot.

C-right et/ou M-f (forward-word)

Même chose mais vers le la fin du buffer.

C-a et éventuellement home (beginning-of-line)

Déplacer le point au début de la ligne courante.

Quand on commence à prendre l'habitude, on se rend compte que C-a est bien plus rapide à taper que home. Mnémotechniquement, a correspond début de l'alphabet de même que C-a permet de se rendre au début de la ligne courante.

C-e et éventuellement end (end-of-line)

Déplacer le point à la fin de la ligne courante.

Quand on commence à prendre l'habitude, on se rend compte que C-e est bien plus rapide à taper que end. Mnémotechniquement, e évoque end (fin).

M-< et/ou C-home (beginning-of-buffer)

Poser la marque (voir Mark, region, quesako ?, Section 2.10) puis déplacer le point au début du buffer. Le fait que beginning-of-buffer pose la marque avant de déplacer le point au début du buffer est très pratique : il suffit de taper C-x C-x pour retourner à l'endroit où l'on a appelé beginning-of-buffer.

M-> et/ou C-end (end-of-buffer)

Poser la marque (voir Mark, region, quesako ?, Section 2.10) puis déplacer le point à la fin du buffer. Même remarque que pour beginning-of-buffer.

C-SPC et C-@ (set-mark-command)

Poser la marque à l'endroit où se trouve le point. Voir Mark, region, quesako ?, Section 2.10 pour le concept de marque.

C-x C-x (exchange-point-and-mark)

Échanger les positions du point et de la marque. Très pratique quand on s'est pas mal déplacé dans un buffer et que l'on souhaite revenir là où se trouve la marque.

Mnémotechniquement, x évoque eXchange.

M-x goto-line (goto-line)

Demander le numéro d'une ligne (via le minibuffer) et y déplacer le point. Surtout utile pour les programmeurs.

C-s (isearch-forward)

Démarre une recherche incrémentale dans le buffer courant. Cela signifie que vous êtes invité à taper du texte dans le minibuffer et que au fur et à mesure, Emacs déplace le point, si possible, au premier endroit du buffer où ce texte apparaît à partir de celui où la commande a été appelée.

Si la recherche a été fructueuse, vous pouvez passer à l'occurrence suivante du texte tapé en tapant à nouveau C-s. Pour chercher vers le début du buffer au lieu de chercher vers la fin, il suffit de taper C-r. Enfin, pour terminer la recherche, il suffit de taper :

Cette commande est bien sûr indispensable. Mnémotechniquement, s évoque search et r reverse.

C-r (isearch-backward)

Même chose que pour isearch-forward mais vers le début du buffer, le sens de la recherche pouvant être inversé avec C-s.

M-C-f (forward-sexp ou autre suivant le mode majeur courant)

Déplacer le point à la fin de la sexp où il se trouve. Une sexp au sens d'Emacs est une expression d'un langage de programmation (voir le GNU Emacs Manual). Cette fonction est indispensable avec les expressions parenthésées ou assimilées (comportant un délimiteur ouvrant et un délimiteur fermant). Elle permet par exemple en mode Emacs-Lisp de se déplacer automatiquement après la parenthèse fermante correspondant à (matching en anglais) la parenthèse ouvrante qui se trouve sous le point. De même, elle permet en mode C de se déplacer d'une accolade ouvrante à l'accolade fermante correspondante.

M-C-b (backward-sexp ou autre suivant le mode majeur courant)

Cette fonction est le pendant de la fonction précédente. Elle permet notamment de se déplacer en mode Emacs-Lisp d'une parenthèse fermante à la parenthèse ouvrante correspondante et en mode C d'une accolade fermante à l'accolade ouvrante correspondante.

Notez que par défaut, les séquences de touches C-b (comme backward), C-f (comme forward), C-n (comme next) et C-p (comme previous) jouent le rôle des flèches gauche, droite, bas et haut (respectivement). Certains disent qu'avec l'habitude, elles permettent d'être plus efficace que les flèches. Elles peuvent dépanner dans le cas d'une mauvaise configuration le temps de remettre les choses en place.


3.5.2 Édition

Avant de présenter les commandes d'édition fondamentales, à savoir annuler des actions précédentes, copier/couper/coller et remplacer du texte, il est nécessaire d'expliquer deux concepts simples : ce qu'Emacs appelle delete et kill.

Ceci étant dit, voici les fonctions d'édition de base d'Emacs :

C-_ et C-x u (undo)

Annuler la dernière action. Ceci fonctionne sur plusieurs niveaux (en d'autres termes, plusieurs appels successifs à cette fonction annulent plusieurs modifications successives dans le buffer courant). Indispensable.

Astuce énorme : pour faire du redo (annuler des annulations), il suffit, après avoir appelé au moins une fois successivement undo, d'insérer un caractère quelconque, par exemple un espace, puis d'appeler à nouveau undo. L'insertion du caractère brise en quelque sorte la chaîne des undo et permet de la remonter (les actions annulées sont d'abord l'insertion du caractère puis les undo qui l'on précédée.

M-w (kill-ring-save)

Copier la région (voir Mark, region, quesako ?, Section 2.10) dans le kill ring mais ne pas l'effacer du buffer. Indispensable.

C-w (kill-region)

Ceci kille la région (donc l'efface du buffer après l'avoir placée dans le kill ring). Indispensable.

C-y (yank)

Insérer le bloc de texte le plus récemment killé ou yanké. Ceci correspond donc à peu de choses près à la fonction traditionnellement appelée coller. Indispensable.

M-y (yank-pop)

Remplacer le bloc de texte précédemment yanké par celui qui le précède dans le kill ring. Cette fonction permet donc de se « balader » dans le kill ring.

M-% (query-replace)

Effectuer un rechercher/remplacer interactif. Très utile, bien sûr.

M-x comment-region (comment-region)

Cette fonction n'est a priori utile qu'aux programmeurs et n'a de sens que dans un mode définissant la syntaxe d'un commentaire (ce qui est probablement le cas de tous les modes consacrés à un langage de programmation). Elle sert à mettre la région en commentaire, au sens défini pour ce concept par le mode courant (par exemple, la région sera entourée de /* et */ en mode C).


3.6 Les bookmarks

Les bookmarks sont très pratiques si vous devez ouvrir de nombreuses fois un fichier situé à un endroit figé dans votre arborescence. Ce cas se produit typiquement assez souvent, par exemple avec le fichier .emacs (ou .emacs.el), un document quelconque rédigé sur plusieurs jours, etc.

Une utilisation basique des bookmarks est très simple :

C-x r m (bookmark-set)

Mettre un bookmark sur le fichier visité dans le buffer courant.

Cela signifie : ajouter la liste des bookmarks (bookmark list) la correspondance entre un nom choisi par l'utilisateur (par l'intermédiaire du minibuffer) et le fichier en question.

C-x r b (bookmark-jump)

Ouvrir un fichier en donnant juste (et avec complétion bien sûr) le nom d'un bookmark qui y fait référence.

M-x edit-bookmarks (edit-bookmarks)

Ouvre un buffer appelé *Bookmark List* en mode Bookmark Menu dans lequel on peut modifier la liste des bookmarks.

Ce buffer est à utiliser un peu comme celui invoqué par M-x dired (pour manipuler des fichiers et répertoires) : on déplace le point sur la ligne qui nous intéresse et on tape une touche pour effectuer une action sur le bookmark indiqué à cette ligne.

Par exemple, avec r (comme rename), on peut renommer un bookmark. Pour effacer des bookmarks, il suffit de les marquer pour effacement (deletion) avec d puis de taper x (pour eXecute). Si on a marqué des bookmarks pour effacement et qu'on désire annuler ce marquage, il suffit de taper u (pour unmark) avec le point sur la ligne en question.

Avec C-h m dans un buffer en mode Bookmark Menu, vous pouvez vous faire une petite idée de ce qu'on peut faire dans ce mode.

Conclusion : si vous avez un fichier /chemin/très/long/et/pénible/à/taper et que vous allez l'ouvrir plusieurs fois d'ici peu, ouvrez-le, faites un petit C-x r m et nommez le bookmark « machin ». La prochaine fois que vous voudrez ouvrir ce fichier, il suffira de faire C-x r b puis de taper « machin » (voire moins en utilisant la complétion) et RET pour valider.


3.7 Les macros

Les macros constituent probablement l'outil d'Emacs offrant le meilleur rapport complexité de l'action effectuée / temps consacré à la spécifier. Elles permettent d'enregistrer à peu près n'importe quelle séquence d'événements clavier[20] pour ensuite la répéter avec un simple f4 (C-x e avant la version 22). Voici quelques commandes de base pour utiliser les macros :

f3 (kmacro-start-macro-or-insert-counter)

Démarrer l'enregistrement d'une macro. Cette fonction, utilisée pendant l'enregistrement, permet également d'insérer un entier qui est incrémenté à chaque nouvelle exécution de la macro.

f4 (kmacro-end-or-call-macro)

Terminer l'enregistrement d'une macro commencé avec f3. Utilisée hors enregistrement d'une macro, cette fonction permet également d'exécuter la dernière macro enregistrée.

C-x C-k C-e (kmacro-edit-macro)

Éditer la dernière macro enregistrée.

C-x C-k b (kmacro-bind-to-key)

Affecter un raccourci clavier à la dernière macro enregistrée. Les sequences de touches allant de C-x C-k 0 à C-x C-k 9 et de C-x C-k A à C-x C-k Z sont réservées pour les macros clavier définies par l'utilisateur (et elles bénéficient d'un petit raccourci : il suffit de taper par exemple 4 après C-x C-k b pour affecter la séquence C-x C-k 4 à l'exécution de la dernière macro définie).

C-x C-k n (kmacro-name-last-macro)

Donner un nom à la dernière macro enregistrée.

M-x insert-kbd-macro (insert-kbd-macro)

Insérer la définition d'une macro nommée (typiquement avec kmacro-name-last-macro) dans le buffer courant (typiquement le .emacs.el pour pouvoir retrouver sa macro au prochain démarrage d'Emacs). Par exemple, pour une macro essai sans intérêt simulant un appui sur la flèche droite du clavier, on obtient :

     (fset 'essai
        (lambda (&optional arg) "Keyboard macro."
          (interactive "p")
          (kmacro-exec-ring-item (quote ([right] 0 "%d")) arg)))

Les raccourcis claviers indiqués ci-dessus sont valables depuis Emacs 22 ; les anciens raccourcis (« C-x ( » pour définir une macro, « C-x ) » pour terminer la définition et « C-x e » pour l'exécuter) sont encore actifs par défaut sous Emacs 23. De plus, après le premier C-x e, il suffit d'appuyer sur e pour exécuter à nouveau la macro.

Comme vous le voyez, les macros sont extrêmement simples à définir et utiliser. Et pourtant, elles n'en sont pas moins puissantes, notamment en ayant les points suivants à l'esprit :

Il y a pas mal d'autres possibilités relatives aux macros clavier, par exemple :

Le lecteur intéressé trouvera tout cela dans le GNU Emacs Manual.


[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ suivant ]


À la découverte de GNU Emacs

Version 1.37 (1er février 2019)

Florent Rougon mailto:f . rougon (**AT**) free [point] fr