Pourquoi utiliser Emacs ? Tout simplementparce que c'est l'éditeur de textes le plus agréable, et surtout parce que c'est le plus évolutif et le plus maniable. De plus, Emacs permet de faire quantité de choses sans sortir de l'éditeur de textes: envoyer du courrier, utiliser ftp , lire les news , faire du dessin en mode texte, lancer des commandes shell , lire les mans, travailler avec les répertoires...
Je me contenterai d'utiliser les conventions d'Emacs quant à la représentation des séquences de touches à frapper. C'est-à-dire:
RETURN
: Frappe de la touche Enter
. DEL
: Frappe de la touche Delete
. ESC
: Frappe de la touche Esc
. C-x
: Frappe de la touche Ctrl
et de la
touche x
simultanément (notez que C-X
produit
le même effet). M-x
: Frappe différée de la touche Esc puis de la
touche x. M-x toto
: Frappe différée de la touche Esc
puis de
la touche x
puis de la séquence de touches toto
. S-right
: Frappe simultanée de la touche shift et du
bouton droit de la souris. S-C-right
: Frappe simultanée de la touche shift, de la
touche Ctrl, et du bouton droit de la souris.
Les noms des fonctions Emacs sont en italique afin que vous
puissiez les réutiliser dans la programmation LISP d'Emacs. Vous
pouvez de plus les lancer en frappant M-x
nom-de-la-fonction .
Vous trouverez les séquences de touches à frapper en TeleType
pour une lecture plus claire.
On lance Emacs tout simplement en tapant emacs
au prompt du
shell. Mais pour éditer le fichier toto.txt, on utilise la
ligne de commande emacs toto
.
C-x C-c
permet de quitter Emacs, C-z
permet de
le suspendre afin de pouvoir le rappeler avec fg
sous le
shell. Cependant, cette dernière façon de sortir ne fonctionne que si
on inhibe la commande C-z
dans le fichier de configuration
.emacs avec la ligne (global-unset-key "\C-z")
.
Le curseur d'Emacs se déplace tout simplement avec les flèches situées sous le pavé numérique, mais on peut gagner beaucoup de temps en utilisant les raccourcis clavier.
Par exemple, pour vous déplacer d'une position quelconque au milieu
d'une ligne vers son début, tapez C-a
au lieu de revenir
au début avec les flèches. Le curseur apparaît immédiatement au début
de la ligne. Les commandes de déplacement sont une alternative
efficace à l'utilisation des flèches.
Commandes de remplacement d'un caractère simple:
C-f
(forward-char) : Déplacement d'un caractère vers la
droite. C-b
(backward-char) : Déplacement d'un caractère vers la
gauche. C-p
(previous-line) : Déplacement d'une ligne vers le
haut. C-n
(next-line) : Déplacement d'une ligne vers le bas.Commandes de déplacement sur plusieurs caractères:
M-f
(forward-word) : Déplacement d'un mot vers la
droite du curseur. M-b
(backward-word) : Déplacement d'un mot vers la
gauche du curseur. C-a
(beginning-of-line) : Déplacement au
début de la ligne courante. C-e
(end-of-line) : Déplacement à la fin de la
ligne courante. M-{
(backward-paragraph) : Déplacement vers
le paragraphe précédent. M-}
(forward-paragraph) : Déplacement vers
le paragraphe suivant. C-v
(scroll-up) : Déplacement d'un écran vers le
bas. M-v
(scroll-down) : Déplacement d'un écran vers le
haut. M->
(end-of-buffer) : Déplacement à la fin du
buffer. M-<
(beginning-of-buffer) : Déplacement au début du
buffer.Une notion importante dans Emacs est celle des modes: quand Emacs ouvre un fichier existant, il applique au buffer crée pour l'occasion un mode précis. Un mode donne à un buffer des caractéristiques propres: des fonctions et des raccourcis spéciaux, des variables, une indentation particulière, et sous xemacs, un menu déroulant propre au mode.
Quelques exemples de modes: text, C, lisp, SGML, texinfo, LaTeX, ...
La plus simple manière de détruire un texte consiste à utiliser la
touche DEL
(ou encore appelée BackSpace
ou
Bs
par nos amis anglophones), qui détruit le caractère
immédiatement à gauche du curseur.
Mais quand on a un certain nombre de mots, de phrases ou de paragraphes à détruire, d'autres commandes sont plus appropriées.
Commandes de destruction:
C-d
(delete-char) : Détruit le caractère situé
sous le curseur. M-DEL
(kill-word) : Détruit le mot précédent (ou le mot courant si le curseur est au milieu d'un mot). M-d
(kill-word) : Détruit le mot suivant (ou
le mot courant si le curseur est au milieu d'un mot). C-k
(kill-line) : Détruit les caractères
à droite du curseur jusqu'au caractère de fin de ligne.Mais il existe une autre façon de détruire du texte: l'utilisation des régions.
La manière la plus simple de définir une région est de se positionner
sur l'une ou l'autre des deux extrémités d'une suite de caractères et
de taper C-@
ou C-ESPACE
(le caractère sous le
curseur est ainsi marqué par Emacs), puis de se positionner à l'autre
extrémité de la région à définir.
Autres manières de définir une région:
M-h
(mark-paragraph) : Marque la fin du
paragraphe suivant ou en cours. C-x C-p
(mark-page) : Marque la fin de la page
courante. C-x h
(mark-whole-buffer) : Marque la fin du
buffer (c'est à dire le dernier caractère du buffer en cours).
A partir de là, en tapant C-w
ou M-w
, le texte de
la région est envoyé dans le presse-papiers (mais dans le cas de
C-w
le texte est efface et dans le cas de M-w
, le
texte reste dans le buffer édité).
Le texte se trouvant dans le presse-papiers peut être rappelé de deux
manières sous Emacs.
La première en utilisant C-y
(yank) , qui insère
à la position du curseur le texte se trouvant dans le presse-papiers
(soit le texte qui à été copié en dernier dans le presse-papiers),
et la deuxième en utilisant M-y
(yank-pop)
juste après un yank pour remplacer le texte du
presse-papiers par la copie précédente, et l'insérer à la position du
curseur.
Argh ! Vous avez détruit 3 pages de texte par inadvertance. Pas de
panique, Emacs peut réparer tout ca. En tapant C-x u
(undo) vous pouvez annuler la dernière action effectuée,
Vous avez tapé quelque chose au clavier et vous ne savez pas comment
vous en sortir ? C-g
(keyboard-quit) permet
d'annuler toute action courante au clavier (saisie de nom, ...) mais
pas une commande validée.
Emacs permet (dans le mode édition) de lire un fichier, de créer un fichier, d'insérer un fichier dans un autre, et bien sûr de sauver un fichier.
Commandes de manipulation de fichier sous Emacs:
C-x C-f
nom-du-fichier C-x i
à l'endroit où l'on désire insérer
l'autre fichier. C-x C-s
suivi d'un nom si le buffer
n'en a pas.
Notez que par défaut la recherche dans Emacs ne respecte pas la
casse. Pour que la recherche y prête attention, mettez dans votre
fichier de configuration .emacs
la ligne suivante: (setq-default case-fold-search nil)
L' "incremental search" est une recherche dans un texte avec pour argument une chaîne de caractères. Mais la différence avec une recherche normale est qu'au fur et à mesure que l'utilisateur tape la chaîne, le curseur se place sur la première occurrence trouvée.
On lance l' ”incrémental search” (elle s'effectuera en avant à
partir de la position du curseur) en tapant C-s
(isearch-forward) . Pour effectuer la même recherche vers
l'arrière, la commande est C-r
(isearch-backward).
Notons que l' "incremental search" reprend sa recherche au début du texte quand elle arrive à la fin sans trouver d'occurrence (overwrapped search).
Et si je tape un listing, et que j'ai envie de remplacer les 250 occurrences du nom de ma fonction toto par un nom de fonction plus parlant ?
Pas de problème: en tapant M-x replace-string
(replace-string) Emacs remplace toutes les occurrences,
mais sans confirmation.
Et si je ne veux en remplacer qu'une partie ? En utilisant la commande
M-%
(query-replace), Emacs vous demandera à
chaque occurrence de confirmer en tapant y
pour remplacer
l'occurrence, n
pour la garder telle quelle, ou ESC
pour arrêter l'opération.
On ne peut travailler sous Emacs que si on a compris la différence entre fichiers, buffers, et fenêtres.
Elle est la suivante: un fichier est une suite d'octets réservés sur un disque, repérée par un nom. Un buffer est une copie de travail qu'Emacs fait d'un fichier afin de pouvoir travailler dessus. Mais une fenêtre n'est qu'une zône de l'écran dans laquelle est affiché un buffer.
Quand on lance Emacs, deux buffers sont déjà crées (le buffer *Buffer
List*
, et le buffer *scratch*
(en fait un espace de
travail vide où vous pouvez taper votre texte) si Emacs a été
appelé sans paramètre, ou le buffer portant le nom du paramètre). Dans
le buffer *Buffer List*
, on trouve le nom des buffers
ouverts (donc, *Buffer List*
, et *Scratch*
ou un
buffer ayant le même nom que le paramètre).
Pour se promener dans les buffers, on utilise C-x b
nom
du buffer . Si le buffer existe, on se retrouve dedans, sinon
Emacs ouvre un nouveau buffer au nom précisé.
Pour avoir la liste des buffers, on ouvre le buffer *Buffer
List*
, ou on utilise C-x C-b
, qui ouvre le buffer
*Buffer List*
.
Pour détruire un buffer (quand on utilise Emacs pendant longtemps, la
liste des buffers s'allonge considérablement), on utilise C-x k
(kill-buffer) suivi du nom du buffer (par défaut, le nom du
buffer courant).
La commande C-x s
(save-some-buffers) permet de
sauver à la chaîne plusieurs fichiers ouverts simultanément, alors que
C-x C-s
ne sauve que le buffer courant.
Pour renommer un buffer, on utilise la fonction rename-buffer
(M-x rename-buffer)
.
Au démarage, Emacs ouvre une fenêtre, pour le buffer *Scratch*
ou pour le buffer d'un fichier appelé en argument.
Les commandes pour manipuler les fenêtres sont les suivantes:
C-x 2
(split-window-horizontally) divise
horizontalement la fenêtre courante en deux fenêtres contenant chacune
le buffer courant. C-x 5
(split-window-vertically) divise
verticalement la fenêtre courante en deux fenêtres contenant chacune le
buffer courant. C-x o
(other-window) change la fenêtre
courante. C-x 0
(delete-window) détruit la fenêtre
courante. C-x 1
(delete-other-windows) détruit les
autres fenêtres.Un des avantages d'Emacs par rapport aux autres éditeurs de texte (vi, elvis, ed, ...) est qu'il permet de travailler sur autre chose que de l'édition de texte: c'est un intégré.
Emacs est très utile pour envoyer des mails car il permet de taper ses mails directement dans l'éditeur de textes au lieu d'utiliser un éditeur de textes comme logiciel d'appoint (comme avec elm).
Pour taper une lettre, on utilise la commande C-x m
(mail) . Emacs ouvre alors un buffer *mail*
dans lequel il place les
lignes:
To: Subject: --text follow this line--
Il suffit alors de mettre l'adresse derrière le To:
, le sujet
derrière le Subject:
, et de taper le texte sous le --text
follow this line--
.
Enfin, quand la lettre est tapée, on peut l'envoyer en tapant C-c
C-c
, ce qui ferme le buffer et envoie la lettre. Si on veut
garder une trace de ce mail, on peut bien évidemment effectuer une
sauvegarde du fichier avant de lancer le mail avec C-x
C-s
. Une autre façon d'envoyer le mail consiste à utiliser C-c
C-s
qui ne détruit pas le buffer *mail*
.
On peut inclure une signature à la fin du buffer en tapant C-c
C-w
, ce qui ajoute à la fin de la lettre le contenu du fichier
$HOME/.signature
s'il existe.
On peut faire bien d'autres choses avec le lecteur de mails d'Emacs (blind copies, reply, ...), mais et je vous conseille de vous reporter à la documentation d'Emacs si vous voulez en savoir plus à ce sujet.
Utiliser le shell sans quitter Emacs: c'est cooooool !
En tapant M-x shell
, Emacs ouvre une nouvelle fenêtre
contenant le buffer *shell*
, dans laquelle on peut taper
des commandes shell, en utilisant le presse-papiers, les
recherches, bref, toutes les commandes standards d'Emacs.
Notez qu'Emacs lance le shell comme dans une session normale (exécution
du fichier .bashrc
, alias , etc...).
Emacs offre aussi la possibilité de travailler sur les répertoires. Il
suffit de les ouvrir comme on ouvre un fichier (C-x C-f
) ou
au démarrage avec un argument.
A partir de là, Emacs crée un buffer au nom du répertoire, qui contient le nom des fichiers qui le composent ainsi que leurs attributs (permissions, propriétaire, groupe, date, taille, ...).
L'utilisateur peut agir sur un fichier en se positionnant sur sa ligne, et en appuyant sur une des touches suivantes (entre parenthèses la commande UNIX correspondante):
r
: renomme le fichier (mv)
e
: édite le fichier (Emacs)
c
: copie le fichier (cp)
~
: met tous les fichiers terminant par ~
dans une liste
en vue de leur destruction (rm *~)
. \#
: met tous les fichiers de sauvegarde d'Emacs dans
la liste: tous ceux dont le nom est entre dièses (rm \#*\#)
. u
: enlève le fichier de la liste. x
: détruit les fichiers de la liste. M
: change les permissions (chmod)
.
Emacs permet la consultation directe de la documentation
on-line d'UNIX (les mans). L'avantage par rapport à la
lecture par la commande UNIX man
est que la consultation est
beaucoup plus facile grâce aux capacités d'Emacs.
On appelle les mans avec la commande M-x man
. Emacs demande
ensuite quelle page du manuel doit être appelée (par exemple,
fork(2)
), puis ouvre un buffer contenant la page correspondante du
manuel.
Emacs est un éditeur de textes agréable et complet, mais il est certain qu'il ne peut pas répondre aux attentes de chacun. C'est pourquoi Emacs est (presque) totalement paramétrable, ce qui permet à chacun de se faire son Emacs personnel, en utilisant les macros, la personnalisation du clavier, la programmation LISP, ou en modifiant les variables d'Emacs.
Une macro-commande est un ensemble répétable de commandes Emacs enregistrées au préalable par l'utilisateur.
Généralement, ces macros permettent de travailler à la chaîne en effectuant de grosses modifications sur un texte en quelques secondes.
Commandes pour utiliser les macros:
C-x (
: (start-kbd-macro) Commence la
définition d'une macro. C-x )
: (end-kbd-macro) Finit la
définition d'une macro. C-x e
: (call-last-kbd-macro) Exécute la
dernière macro définie. M-
n C-x e
: Exécute n
fois la dernière macro définie. C-u C-x (:
Exécute la dernière macro définie, puis
rajoute à la fin de la macro les commandes tapées jusqu'à la rencontre
de la commande (end-kbd-macro) , c'est-à-dire C-x )
. M-x
nom de la macro : exécute la macro nom de
la macro .
La personnalisation du clavier passe par la modification du fichier
.emacs
ou par l'utilisation de la commande M-x
.
Elle permet d'exécuter quelques commandes à
la suite comme dans les macros.
Pour définir le clavier on utilise define-key ou global-set-key (on peut aussi utiliser local-set-key pour définir une séquence de touches sur un buffer uniquement), et global-unset-key pour rendre neutre une séquence de touches.
Lors de la personnalisation du clavier, on utilise les conventions suivantes:
\C-x
: Frappe de la touche CTRL
, et de
la lettre x
(C-x
). \e
: Frappe de la touche ESC
. \r
: Frappe de la touche RETURN
. \t
: Frappe de la touche TAB
.Par exemple, pour insérer dans un buffer un petit smiley dès qu'on
tape C-u
, on va insérer dans le fichier .emacs
les
lignes:
(global-unset-key "\C-u")
(inhibe la séquence de touches C-u
) (global-set-key "\C-u" ":-)")
(affecte à la séquence C-u
les caractères :-)
)Emacs possède une multitude de variables système, ce qui permet à l'utilisateur de modifier Emacs a sa guise en évitant la programmation Emacs LISP.
Quelques variables d'Emacs (entre parenthèses, la valeur par défaut). Cette liste est bien entendu loin d'être exhaustive:
$
s'affiche à la fin de la ligne).Ce document est placé sous copyright (c) 1997 de Benjamin Drieu, association APRIL.
Ce document peut être reproduit et distribué dans son intégralité ou partiellement, par quelque moyen physique que ce soit. Il reste malgré tout sujet aux conditions suivantes :