# Emacs

# GNU Emacs : tutorial

Ce tutorial est destiné aux gens souhaitant se familiariser avec GNU Emacs. Si vous avez davantage de questions, vous pouvez les poser sur forum dans le conti `ens.forum.informatique.editeurs.emacs`. Pour savoir comment poster sur forum et le lire, lisez la documentation à ce sujet. Un aide-mémoire des principales commandes d'emacs est également disponible.

## Généralités

### Qu'est-ce qu'Emacs ?

Emacs est un éditeur de texte très puissant, qui est également capable de beaucoup d'autres choses (invoquer une commande shell, envoyer ou recevoir du courrier électronique, lire les news, se transformer en psy, et même faire le café selon certaines mauvaises langues). En contrepartie, Emacs est assez lourd (beaucoup plus en tout cas que l'éditeur standard d'UNIX, vi) et souvent ésotérique.

Emacs date de 1975. Il a été écrit par Richard M. Stallman qui était alors au MIT. Emacs a été conçu à l'origine comme un ensemble de macros pour un TECO, un vieil éditeur de texte. Emacs veut donc dire « Editing MACroS ». Par la suite, plusieurs versions d'Emacs ont été développées, mais la version la plus répandue reste GNU Emacs (alias FSF Emacs), celle de M. Stallman, qui est la réécriture du Emacs originel.

Ce tutorial est consacré à GNU Emacs (accessible en lançant simplement « emacs » à l'ENS) dans sa fonction d'éditeur de textes. Il ne faut pas confondre GNU Emacs et XEmacs. Ce ne sont pas deux versions du même programme mais, malgré les ressemblances, deux programmes différents.

Emacs est principalement utilisé sous les systèmes de type UNIX, mais il existe également pour MS-DOS ou Windows.

### Format des commandes emacs

Les commandes d'emacs utilisent les touches `Control` (souvent abrégé en `Ctrl` sur la touche) ou `Meta` de votre clavier. Si vous n'avez pas de touche `Meta` ou que vous ne savez pas où elle est, utilisez la touche `Escape` (ou `Échap`). Comme les commandes sont assez complexes, on utilise des abréviations. Ainsi, `C-c` signifie : appuyez sur `Ctrl` et, en gardant la touche enfoncée, appuyez sur `c`. `M-g` signifie : appuyez sur la touche `Meta` et, en gardant la touche enfoncée, sur `g`.

Si vous utilisez `ESC` à la place de la touche `Meta`, il faut appuyer sur `ESC` puis sur l'autre touche.

En particulier, par exemple, `C-x i` (insertion d'un fichier) ne fait pas la même chose que `C-x C-i` (qui décale une région sélectionnée d'un caractère vers la droite)... Taper des commandes complexes d'emacs requiert parfois un peu de doigté. Si vous vous êtes trompé de commande, vous pouvez annuler avec `C-_` (cf. ci-dessous la gestion des erreurs).

Dernière précision : toutes les commandes emacs sont accessibles en utilisant leur nom complet, qu'on peut appeler en tapant d'abord `M-x`. Certaines d'entre elles sont disponibles par le biais de raccourcis comme ceux cités plus haut : `M-g` par exemple a pour nom complet `M-x goto-line`. Mais beaucoup de commandes sont accessibles seulement par un nom complet. En outre, vous pouvez parfois retrouver une commande en passant par son nom complet (on retient mieux que `M-c` met en majuscule la première lettre d'un mot quand on se souvient que le c est pour capitalize-word).

### Obtenir de l'aide

Emacs a la particularité d'avoir une aide en ligne importante. Pour y accéder, lancez emacs tout seul (cf. infra) ou tapez `C-h` ou encore `M-x help`.

Pour les utilisateurs de la config conscrits 2002, attention : la commande d'aide n'est plus `C-h` mais `M-?`. Le remplacement est à faire pour toutes les commandes d'aide qui suivent.

`C-h k` vous permet d'obtenir des renseignements succints sur une commande donnée. Exemple : vous voulez savoir ce que fait la commande `M-g`. Tapez `C-h k`. Emacs vous demande de décrire la commande (key en anglais) que vous souhaitez connaître. Tapez alors `M-g`. Emacs ouvre en 2 la fenêtre et vous dit qu'il s'agit de la commande `goto-line`, qu'on l'emploie comme ceci : `M-g <nombre n>` et qu'il s'agit d'aller à la ligne n.

`C-h t` lance le tutorial officiel d'emacs (en anglais).

`C-h i` vous donne accès aux répertoires « info » qui contiennent de l'aide sur différents programmes, parmi lesquels emacs. Cette commande vous envoie directement sur la rubrique emacs. On navigue entre les fichiersgrâce à des liens hypertexte. On passe de lien en lien avec `TAB` et `M-TAB`, on suit un lien avec `Enter` et on remonte vers le répertoire père avec `u`;

Pour quitter l'aide, on utilise les commandes de manipulation des buffers (cf. ci-dessous « Manipuler plusieurs buffers en même temps »).

Vous pouvez obtenir la liste des commandes d'emacs en tapant `M-x describe-bindings`.

## Manipuler des fichiers

### Lancer emacs

Emacs se lance comme n'importe quel programme sous UNIX. Si vous tapez :

    clipper ~ $ emacs

Emacs se lancera dans une fenêtre. Pour lancer emacs dans votre terminal, utilisez l'option `-nw`. Cette option est particulièrement pratique lorsque vous souhaitez travailler à distance sur un fichier qui est sur votre compte clipper, par exemple, mais elle vous privera de certaines possibilités (les menus déroulants et les boutons, par exemple). Si vous souhaitez travailler sur un fichier précis, tapez emacs puis le nom du fichier :

    clipper ~ $ emacs maitrise.tex

Si vous observez la fenêtre d'emacs, vous pourrez voir un certain nombre d'informations qui dépendent de la version d'emacs qui est installée. À la date où cette documentation est écrite, c'est la version 21.2.1 qui est installée par défaut sur clipper. Pour savoir quelle est votre version, tapez

    clipper ~ $ emacs --version

Les renseignements donnés ici valent pour cette version. Il est possible que certaines choses ne fonctionnent pas avec des versions plus vieilles.

Notez aussi que certaines commandes ne sont valables que dans le cadre de la config conscrit. Ce tutorial signale les différences entre config conscrit et config standard.

À l'heure actuelle, emacs ressemble à ceci :

Tout d'abord, vous voyez en haut de la fenêtre des menus déroulants (File, Edit, Options, Buffers, Tools, Help), et en-dessous quelques icônes. Il est commode au départ d'utiliser menus déroulants et icônes, mais il ne faut pas en abuser. C'est en apprenant les raccourcis claviers que vous exploiterez au maximum les possibilités d'emacs et que vous serez plus efficaces. Remarquez aussi en bas de la fenêtre ce qu'on appelle le mini-buffer, qui sert à emacs pour communiquer avec vous. Lorsque vous tapez une commande, elle s'affiche dans le mini-buffer.

Entre les deux se trouve, en gris sur l'image (avec « GNU Emacs »), la « ligne de mode » (mode line en anglais). Elle donne de précieuses indications telles que le nom du fichier en cours d'édition, le mode majeur et le(s) mode(s) mineur(s) dans lequel vous vous trouvez (cf. ci-dessous sur les modes d'emacs), éventuellement le numéro de la ligne où se trouve votre curseur, etc.

### Les modes d'emacs

Emacs peut s'adapter au type de fichier que vous éditez. Ce sont ses « modes ». Le mode par défaut est appelé « fondamental », il n'a pas de comportement particulier. Il existe de nombreux modes, mais les plus important sont le mode texte, le mode C ou encore le mode LaTeX. Quand vous éditez un fichier, emacs choisit son mode en fonction de l'extension du fichier en question. Par exemple, si vous éditez un fichier en `.tex`, il se mettra automatiquement en mode LaTeX. S'il ne peut pas déterminer quel type de fichier vous allez éditer, il se met en mode fondamental.

Les modes C, texte ou LaTeX sont des modes majeurs. Il existe aussi des modes mineurs qui peuvent s'activer ou se désactiver à l'intérieur d'un mode majeur. Par exemple, le mode « fill » signifie qu'emacs va aller à la ligne dès que c'est nécessaire. Le mode « overwrite » signifie qu'il va écrire par-dessus les caractères déjà tapés au lieu de les insérer. Le mode majeur et le(s) mode(s) mineur(s) dans lesquels vous vous trouvez sont indiqués dans la ligne de mode.

### Fichiers et buffers

Tout d'abord, un rappel d'ordre général. Les éditeurs de texte n'éditent pas directement un fichier. Ils mettent le contenu de votre fichier dans un buffer (qu'on traduit parfois par « tampon ») temporaire, qu'ils éditent. Quand vous sauvegardez, l'éditeur retransfère les contenus du buffer dans votre fichier. Si vous quittez l'éditeur sans sauvegarder, le buffer est détruit et votre fichier demeure donc intact. C'est pourquoi, quand on lance emacs sans argument, il ouvre un buffer appelé `*scratch*` : c'est un buffer sans fichier associé. `*Help*` est un autre exemple de buffer non associé : c'est l'aide en ligne.

Que vous ayez lancé emacs tout court ou en lui demandant d'ouvrir un fichier, vous pouvez insérer tout de suite du texte en tapant directement ce que vous voulez.

### Ouvrir un fichier

Vous pouvez ouvrir un fichier, comme nous l'avons vu, simplement en le donnant comme argument à emacs, ou encore le faire une fois emacs lancé. Pour cela, faites `C-x C-f` (nom complet : `M-x find file`). Emacs vous demande alors quel fichier vous voulez ouvrir. Il suffit de compléter le nom du fichier puis d'appuyer sur `Entrée`, puis emacs crée un nouveau buffer qui porte le nom du fichier que vous voulez éditer. À noter que si vous jonglez entre plusieurs buffers, appuyer sur la flèche vers le haut après un `C-x C-f` vous donne accès à l'historique de tous les fichiers déjà ouverts par ce moyen.

Si vous voulez ouvrir un fichier qui existe déjà, il vous suffit de taper les premières lettres de son nom puis d'appuyer sur `TAB`. Emacs essaiera de compléter le nom de fichier pour vous. C'est ce qu'on appelle la complétion.

### Manipuler plusieurs buffers en même temps

Avec un seul et même emacs, vous pouvez manipuler plusieurs buffers en même temps en utilisant le multi-fenêtrage, c'est-à-dire la capacité d'emacs à couper sa fenêtre en deux (ou plus) pour vous permettre d'avoir plusieurs buffers en regard. Pour ouvrir un deuxième buffer, tapez `C-x 2` (la fenêtre se coupe en 2 horizontalement dans ce cas, si vous préférez un découpage vertical, utilisez `C-x 3`). Pour passer d'un buffer à l'autre, faites `C-x o`. Pour faire disparaître le buffer où se trouve votre curseur, tapez `C-x 0`. Pour faire disparaître l'autre c'est `C-x 1`.

Le multi-fenêtrage est une fonctionnalité très utile d'emacs. Elle vous permet de comparer facilement plusieurs fichiers, de faire facilement des copier-coller depuis plusieurs fichiers vers un seul, etc.

### Insérer un fichier

Déplacez votre curseur jusqu'à l'endroit où vous souhaitez insérer un autre fichier. Puis tapez `C-x i` (`M-x insert-file`). Emacs suit la même procédure qu'avec `C-x C-f` : il vous demande quel fichier insérer.

### Sauvegarder un fichier

Si vous tapez `C-x C-s` (`M-x save-buffer`), emacs sauvegarde le buffer dans le fichier associé et indique à l'écran (dans le mini-buffer) « Wrote /users/00/litt/toto/maitrise.tex ». Si vous voulez sauvegarder vos modifications dans un autre fichier, il faut utiliser la commande `C-x C-w`. Le nom complet, `M-x write-file` est transparent : emacs écrit le contenu du buffer dans un fichier qui n'est pas nécessairement celui associé au buffer. `C-x C-w` peut être pratique pour éditer un fichier que vous n'avez pas le droit de modifier.

### Quitter emacs

Tapez `C-x C-c` pour quitter emacs. Si vous avez édité un ou des buffers que vous n'avez pas sauvegardé(s), emacs vous demandera s'il doit le faire avant de se fermer.

Si vous désirez seulement quitter emacs temporairement (pour lire votre mail ou faire une pause dans l'édition de votre fichier), la meilleure solution est d'utiliser `C-z` qui suspend emacs sans le fermer. Dès que vous voudrez reprendre emacs, tapez `fg` dans le shell et vous retrouverez votre fenêtre avec le même buffer et le curseur exactement où vous l'aviez laissé. Si vous êtes en mode graphique, `C-z` minimise la fenêtre d'emacs.

## Manipuler du texte

### Déplacer le curseur

Les raccourcis claviers vous permettent de vous déplacer très facilement dans votre fichier. Ils peuvent remplacer les touches « flèches », certes, mais plus encore vous permettre d'être beaucoup plus rapide que si vous n'utilisiez que les touches de déplacement du clavier. Leur apprentissage est un peu laborieux mais ils vous feront gagner beaucoup de temps.

Bouger d'un(e)... | Vers l'arrière | Vers l'avant
--- | --- | ---
caractère | `C-b` | `C-f`
mot | `M-b` | `M-f`
ligne | `C-p` | `C-n`
début/fin de ligne | `C-a` | `C-e`
phrase | `M-a` | `M-e`
paragraphe | `M-{` | `M-}`
buffer | `M-<` | `M->`

### Effacer

Pour effacer quelques caractères, vous pouvez utiliser les touches `delete` ou `backspace` de votre clavier. Évidemment, vous pouvez aussi utiliser des commandes pour faire ce travail. `C-d` efface le caractère sur lequel se trouve le curseur. `M-d` efface la suite d'un mot à partir de l'endroit où se trouve le curseur (pour que le mot entier soit effacé, il faut placer le curseur au début du mot).

Au niveau d'une ligne, `C-k` efface le reste de la ligne à partir de la position du curseur. Pour effacer la ligne entière, il faut placer le curseur au début de la ligne.

Commande | Nom complet | Action
--- | --- | ---
C-d | M-x delete-char | Efface le caractère sur lequel est le curseur.
M-d | M-x kill-word | Efface le mot à partir du curseur.
M-backspace | M-x backward-kill-word | Efface le mot précédent.
C-k | M-x kill-line | Efface la ligne à partir du curseur
_ | M-x kill-paragraph | Efface le paragraphe à partir du curseur.

### Sélectionner

On peut faire une sélection (pour couper ou copier, par exemple) avec la souris dans emacs. Si vous ne pouvez/voulez pas sélectionner à la souris (par exemple vous utilisez `emacs -nw`), vous pouvez utilisez le système de marquage d'emacs. On place une « marque » au début du texte à sélectionner avec `C-espace`. Ensuite, déplacez le curseur jusqu'à la fin du texte à sélectionner (on appelle l'endroit où est le curseur le « point »). Votre sélection est faite (même si vous ne la voyez pas).

Commande | Nom complet | Action
--- | --- | ---
C-espace | M-x set-mark-command | Poser une marque
C-x C-x | M-x exchange-point-and-mark | Échanger la marque et le point
M-h | M-x mark-paragraph | Sélectionner tout le paragraphe

### Copier et coller

Quand emacs efface quelque chose (mot, ligne, paragraphe, mais pas un caractère isolé), il le place en mémoire (dans ce qu'en anglais on appelle le kill ring). Vous pouvez ensuite « coller » tout ce qui a été effacé (que ce soit une seule grosse suppression ou plusieurs suppressions d'affilée) avec `C-y`. Pour couper à proprement parler, il faut utiliser `C-w` (ou `M-x kill-region`).

À noter que `M-y` permet de naviguer dans l'historique du kill ring. `C-y` colle la dernière chose à avoir été copiée ou coupée, mais si vous voulez coller quelque chose coupé ou collé précédemment, utilisez `M-y` après.

Pour copier quelque chose (pour le coller ensuite), sélectionner ce qu'il faut copier puis faites `M-w`.

### Rechercher et remplacer

Pour effectuer une recherche simple vers la fin du fichier, c'est `C-s` suivi du mot ou de l'expression recherchée. Pour une recherche vers le début du fichier, c'est `C-r`. Avec emacs, il est également possible de faire des recherches en utilisant des expression régulières (avec des métacaractères comme ., *, ?, $, etc.) : taper `C-M-s`. Pour aller à l'occurence suivante du mot ou de l'expression correspondant à votre recherche (simple ou avec une expression régulière), tapez `C-s` ou `C-r`. Pour annuler votre recherche, tapez `C-g`).

La syntaxe des expressions régulières d'emacs est un peu particulière.

De même, pour les remplacements, emacs vous offre deux possibilités. Pour remplacer simplement un mot ou une expression, tapez `M-%`. Pour faire un remplacement à partir d'une expression régulière, c'est `M-x query-replace-regexp`. Dans les deux cas, une fois qu'emacs aura trouvé la première occurrence correspondant à votre demande, il vous demandera s'il doit effectuer le remplacement.

Répondez `y` pour remplacer cette occurrence, `n` pour ne pas le faire. Dans ces deux cas, après avoir effectué ou pas le remplacement, emacs passera à l'occurrence suivante. Pour faire de manière automatique le remplacement sur la suite du fichier, répondez `!`. Pour abandonner le remplacement demandé, appuyez sur `ESC`.

### Formater

Quand vous êtes en mode `Fill` (regardez votre ligne de mode), emacs coupe naturellement les lignes de la meilleure manière possible pour lui. Mais au fur et à mesure de l'édition de votre fichier, vous pouvez vous retrouver avec des lignes très courtes et d'autres trop longues. Une commande très utile est `M-q` qui réarrange le texte d'un paragraphe de manière harmonieuse.

Vous pouvez également changer la longueur des lignes. Par exemple, pour fixer à 20 caractères la longueur des lignes, tapez `C-u 20 C-x f`.

### Changements de casse

Emacs possède des commandes spéciales pour les problèmes de casse (vous tapez deux majuscules de suite au lieu de la majuscule initiale suivie de minuscules, etc.). Pour mettre en majuscules la première lettre d'un mot, tapez `M-c` (c comme capitalize. Pour mettre un mot entier en majuscules, c'est `M-u` (u pour uppercase). Pour le mettre en minuscules, c'est `M-l` (l pour lowercase). Emacs effectue ces transformations à partir de l'endroit où se trouve le curseur, pour changer le mot entier, il faut donc se placer sur sa première lettre.

### Permutations

Comme beaucoup de gens, vous faites des fautes de frappe qui sont souvent dues à un manque de coordination entre les doigts. Vous tapez donc « poru » au lieu de « pour ». Emacs possède des commandes qui peuvent résoudre votre problème en vous permettant de permuter des lettres, des mots, des lignes, des phrases, et même des paragraphes. Ainsi, alors que votre curseur est sur le u de « poru », tapez `C-t` pour intervertir r et u.

Commande | Nom complet | Action
--- | --- | ---
`C-t` | `M-x transpose-chars` | Intervertit deux lettres
`M-t` | `M-x transpose-words` | Intervertit deux mots
`C-x C-t` | `M-x transpose-lines` | Intervertit deux lignes
`_` | `M-x transpose-sentences` | Intervertit deux phrases
`_` | `M-x transpose-paragraphs` | Intervertit deux paragraphes

## Divers

### Gestion des erreurs

Si vous vous êtes trompé et que vous souhaitez revenir à l'action précédente, tapez `C-x u` (ou `C-_`, plus facile à taper). Vous pouvez revenir en arrière ainsi jusqu'à l'ouverture de votre session emacs. Attention, `C-_` ne s'applique qu'à une modification du buffer. Ainsi, on ne peut pas annuler le déplacement du curseur ou une opération de copier.

Si vous tapez `C-_` par erreur, la même touche peut servir à faire un redo (c'est-à-dire un undo d'undo !). Pour cela, il vous suffit de faire un déplacement quelconque du curseur (pour éviter de continuer la séquence d'undo commencée) et de retaper `C-_`. Dans certains cas, les `C-_` en série et imbriqués peuvent avoir des conséquences étonnantes.

Pour revenir carrément à l'état où était votre fichier au moment où vous l'avez sauvegardé pour la dernière fois, tapez `M-x revert-buffer`.

Pour annuler une commande que vous êtes en train de taper (mais que vous n'avez pas encore lancée), tapez `C-g`.

Emacs affichera « Quit » dans le mini-buffer et abandonnera la commande en cours.

### Interaction avec le shell

Il est possible d'exécuter une commande shell depuis emacs, par exemple pour compiler le fichier tex que vous êtes en train d'éditer. C'est la commande `M-!`. Emacs vous demande dans le mini-buffer la commande que vous souhaitez lancer, et vous donne son résultat. Si la commande s'est effectuée sans compte-rendu, emacs vous dit « (Shell command succeeded with no output) ». Sinon, il coupe sa fenêtre en deux et vous donne la sortie de la commande.

Pour exécuter une commande shell puis insérer le résultat de cette commande dans le buffer, tapez plutôt `C-u M-!`. Exemple : vous souhaitez insérer dans votre fichier la date exacte. Tapez `C-u M-!`, puis emacs vous demande quelle commande vous souhaitez exécuter. Répondez « date ». Emacs insérera le résultat de la commande `date` directement dans le fichier, au point où se trouve votre curseur.

Vous pouvez même demander un terminal dans un nouveau buffer, qui s'appelle précisément *Shell*, avec la commande `M-x shell`. Attention, ce terminal ne traite pas les séquences d'échappement, pour cela il faut plutôt faire `M-x term` qui lance *terminal*.

### Arguments numériques

Emacs permet de répéter autant de fois qu'on le souhaite le même caractère ou la même commande grâce à `C-u <nombre>`. Ainsi, `C-u 50 C-p` permet de répéter 50 fois la commande `C-p` et donc de remonter de 50 lignes. `C-u 5 !` vous permet d'insérer 5 points d'exclamation.

Dans le cadre de commandes plus complexes, `C-u <nombre>` agit comme un modificateur. On l'a vu par exemple pour changer la taille des lignes.

### Complétion de mots déjà tapés

`M-/` vous permet de compléter un mot en cours de frappe. Admettons que vous écriviez un article de droit constitutionnel et que vous deviez tapez « anticonstitutionnellement » à plusieurs reprises. La deuxième fois, tapez simplement « anti » puis `M-/`. Emacs complètera tout seul. Si d'autres mots commençant par « anti » apparaissent déjà dans le buffer, taper de nouveau `M-/` permet de cycler entre tous les mots possibles.

### Psychanalyse

On prétend qu'emacs sait aussi faire le café, en attendant, vous pouvez toujours vous faire psychanalyser par lui. Essayez donc `M-x doctor` !

## Configuration d'emacs

Emacs est extrêmement configurable. Pour modifier quelque chose à sa configuration, il faut modifier le fichier `.emacs` se trouvant dans votre répertoire personnel. Le `.emacs` de la config conscrits 2002 contient une petite introduction au langage utilisé ainsi qu'aux configurations de base que l'on peut faire.

Auteur : Marie-Lan Nguyen, avec l'aide de Josselin Noirel, Luc Habert et David Madore. Dernière modification le 2003-03-04