[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ suivant ]
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 :
Ouvrir un fichier (...)
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 (...). »
Toutes les séquences de touches standard liées à ces commandes commencent par le préfixe C-h (pour help).
Lister les commandes d'aide
Donner une liste de commandes dont le nom contient la regexp[12] donnée par l'utilisateur.
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).
Décrire une fonction. Indispensable.
Active le buffer *info* dans lequel on dispose de documentation[13] au format hypertexte Info (voir Le mode Info, Section 4.2.3).
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).
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.
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).
Trouver un package Emacs lié à un sujet donné.
Pour ceux qui ne disposent pas de ce document. :-)
Donner la valeur courante et la documentation d'une variable. Cette commande précise également si la variable est locale au buffer courant. Indispensable.
Afficher les séquences de touches qui invoquent une commande dont on donne le nom. Plutôt utile.
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).
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.
Enregistrer le buffer courant dans un fichier (la commande demande le nom du fichier).
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.
Du calme. D'abord, retenez bien ces trois choses :
dans Emacs, tout est configurable, jusqu'à la couleur de ses chaussettes ;
si un comportement par défaut d'Emacs vous agace, il y a sûrement une bonne raison pour qu'il ait été choisi comme tel ;
si vous ne trouvez pas la fonction que vous désirez pour accomplir une certaine tâche, il est presque[14] toujours possible de l'écrire et il y a de bonnes chances pour que quelqu'un l'ait déjà fait (cherchez sur Internet).
Emacs fait par défaut deux types de sauvegarde des fichiers.
La première, appelée auto-save, est effectuée régulièrement (par exemple, au bout de n secondes ou au bout de p frappes de touches) et produit des fichiers avec des noms du type #monfichier#. Cette sauvegarde permet de récupérer votre travail quand Emacs n'est pas quitté correctement, par exemple si vous débranchez subitement la prise de l'ordinateur[15].
La seconde, appelée backup, est effectuée quand vous sauvegardez un fichier après l'avoir modifié dans Emacs. Elle produit des fichiers avec des noms du type monfichier~.
Pour désactiver cette dernière, les possibilités sont multiples :
si vous n'en voulez jamais, vous pouvez mettre la ligne :
(setq make-backup-files nil)
dans votre fichier d'initialisation (.emacs ou éventuellement .emacs.el à partir de GNU Emacs 20.4) ;
si vous voulez juste sauver un fichier sans faire de copie de sauvegarde, utilisez M-0 C-x C-s (ceci est un appel à save-buffer — C-x C-s — avec un argument numérique : 0) ;
si pour un fichier donné, vous ne voulez jamais de ce genre de sauvegardes, regardez du côté des File variables dans l'aide au format Info (C-h i) ;
si vous souhaitez que les backup files se retrouvent tous dans un même répertoire (ma préférence va pour cette solution, pour la plupart des fichiers), voici comment procéder :
si vous êtes sous Emacs 21, vous pouvez mettre ceci dans votre .emacs.el :
(setq backup-directory-alist '(("." . "/répertoire/choisi/")))
Le "." est une regexp et signifie ici qu'on veut que tous les fichiers de sauvegarde aillent dans /répertoire/choisi/.
si vous êtes encore sous Emacs 20, vous pouvez utiliser le code suivant dans votre .emacs.el sachant que certaines personnes connaissant très bien Emacs disent que cela pourrait parfois poser des problèmes. Je l'ai utilisé pendant plusieurs mois sans problème et ne suis pas le seul à avoir mis en oeuvre cette méthode, mais je préfère vous prévenir. Ah, dernier avertissement, je crois que le code suivant ne fonctionne pas sous GNU Emacs 20.3 car subst-char-in-string n'y est pas encore définie. Cela dit, on peut remplacer cette fonction facilement (ou mettre à jour son Emacs !).
(defvar flo-backup-files-directory "~/.flo-emacs-backup-files-directory/" "Directory for Emacs' backup files. This directory is used by make-backup-file-name.") (defun flo-make-backup-file-name (file) "Create the non-numeric backup file name for FILE. Return an absolute filename based on flo-backup-files-directory after changing all : or / characters into underscores (_)." (expand-file-name (subst-char-in-string ?: ?_ (subst-char-in-string ?/ ?_ file)) flo-backup-files-directory)) (defalias 'make-backup-file-name 'flo-make-backup-file-name))
si...
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).
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]
É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é.
Voir Buffers et fichiers, Section 2.4 pour la définition d'un buffer dans Emacs.
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).
Killer (tuer, effacer) un buffer dont le nom est demandé par la commande.
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.
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).
Voir Windows et frames, Section 2.6 pour la définition d'une window dans Emacs.
Diviser la window courante en deux parties l'une au-dessus de l'autre.
Faire disparaître toutes les windows de la frame courante sauf la window courante : elle occupe donc ensuite toute la frame.
Efface la window courante (selected window) de la frame courante.
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 ».
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.
Choisir un buffer (dont le nom est demandé par la commande) à afficher dans l'other-window.
Ouvrir un fichier (dont le nom est demandé par la commande) dans un buffer affiché dans l'other-window.
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.
Créer une nouvelle frame.
Efface la frame courante.
Se déplacer d'une frame à l'autre au sein de la session Emacs courante.
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.
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.
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.
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 :
Déplacer le point vers le début du buffer de mot[18] en mot.
Même chose mais vers le la fin du buffer.
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.
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).
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.
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.
Poser la marque à l'endroit où se trouve le point. Voir Mark, region, quesako ?, Section 2.10 pour le concept de marque.
É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.
Demander le numéro d'une ligne (via le minibuffer) et y déplacer le point. Surtout utile pour les programmeurs.
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 :
C-g pour retourner à l'endroit où elle a été commencée ;
RET pour rester où on est. La marque est placée à l'endroit où la recherche a été commencée.
Cette commande est bien sûr indispensable. Mnémotechniquement, s évoque search et r reverse.
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.
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.
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.
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.
To delete signifie effacer en anglais. Une fonction telle que delete-region efface donc purement et simplement le contenu de la région.
To kill signifie tuer. Dans Emacs, cela veut dire effacer après avoir gardé l'information dans une structure appelée le kill ring. Le kill ring, comme son nom l'indique (ring signifiant anneau), a une structure circulaire : quand on réalise plusieurs kills, le texte effacé à chaque fois est disposé comme autant d'éléments[19] le long de l'anneau constitué par le kill ring ; lorsqu'on veut insérer un élément du kill ring, on peut faire défiler tous ceux qu'il contient les uns après les autres. Après avoir fait défiler tous les éléments du kill ring, le processus recommence de manière circulaire (on repasse au premier élément, puis au deuxième, etc.).
Ceci étant dit, voici les fonctions d'édition de base d'Emacs :
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.
Copier la région (voir Mark, region, quesako ?, Section 2.10) dans le kill ring mais ne pas l'effacer du buffer. Indispensable.
Ceci kille la région (donc l'efface du buffer après l'avoir placée dans le kill ring). Indispensable.
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.
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.
Effectuer un rechercher/remplacer interactif. Très utile, bien sûr.
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).
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 :
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.
Ouvrir un fichier en donnant juste (et avec complétion bien sûr) le nom d'un bookmark qui y fait référence.
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.
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 :
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.
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.
Éditer la dernière macro enregistrée.
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).
Donner un nom à la dernière macro enregistrée.
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 :
Pour effectuer une action complexe dans une macro, on a souvent intérêt à utiliser des fonctions de déplacement évoluées comme celles permettant de se déplacer au début ou à la fin d'un mot ou d'une ligne.
Dans le même ordre d'idées, il est parfaitement possible — et souvent très efficace — d'utiliser les fonctions de recherche (à commencer par isearch-forward, avec C-s) pour déplacer le point. Il est utile à ce propos de se rappeler que la recherche peut-être terminée en tapant RET et que dans ce cas, la marque est déposée là où la recherche a été commencée.
On peut bien sûr faire du copier/coller au sein d'une macro et exploiter le cas échéant ce que nous venons de dire sur la position de la marque après une recherche. S'il y a plusieurs choses à mémoriser, le plus simple consiste à les stocker dans des registres (se reporter au GNU Emacs Manual, section Registers).
On peut répéter automatiquement xyzt (nombre entier écrit en décimal) fois[21] la dernière macro enregistrée avec C-u x y z t f4 (voir Fonctions et commandes, Section 2.3), par exemple pour traiter chaque ligne d'un buffer, en supposant que la macro passe d'une ligne à la suivante à chaque fois qu'elle est exécutée. Très puissant.
La commande C-x C-k r (apply-macro-to-region-lines) exécute automatiquement la dernière macro enregistrée pour chaque ligne de la région en plaçant le point en début de ligne avant chaque exécution, ce qui est très pratique.
Il y a pas mal d'autres possibilités relatives aux macros clavier, par exemple :
pour contrôler plus finement l'insertion automatique d'un entier par une macro ;
pour rajouter quelques touches à la dernière macro définie ;
pour récupérer les dernières touches tapées et en faire une macro ;
pour poser une question au cours de l'exécution de la macro un peu comme avec le rechercher/remplacer interactif (M-%) ;
pour faire tourner le macro ring et ainsi accéder aux différentes macros clavier définies au cours de la session.
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)mailto:f . rougon (**AT**) free [point] fr