Ce tutorial est destiné aux gens souhaitant se familiariser avec GNU Emacs. Un aide-mémoire des principales commandes d'emacs est disponible.
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.
Emacs est principalement utilisé sous les systèmes de type UNIX, mais il existe également pour MS-DOS ou Windows.
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
.
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).
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
.
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
succincts 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 fichiers grâ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
.
Emacs se lance comme n'importe quel programme sous UNIX. Si vous tapez :
sas ~ $ 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 :
sas ~ $ 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 23.3.1 qui est installée par défaut sur sas.eleves. Pour savoir quelle est votre version, tapez
sas ~ $ 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.
À 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.
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.
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.
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.
TAB
. Emacs essaiera de compléter le nom de
fichier pour vous. C'est ce qu'on appelle la complétion.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.
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.
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.
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.
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 |
... à l'indentation près | M-m | - |
phrase | M-a | M-e |
paragraphe | M-{ | M-} |
buffer | M-< | M-> |
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. |
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 |
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
.
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
).
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
.
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
.
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.
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 |
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.
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
.
C-g
.Emacs affichera « Quit » dans le mini-buffer et abandonnera la commande en cours.
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*.
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.
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 taper
« 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.
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
!
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.