390 lines
13 KiB
XML
390 lines
13 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<!DOCTYPE html
|
||
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
|
||
"tuteurs://DTD/tml.dtd">
|
||
<html>
|
||
<head>
|
||
<title>Emacs avancé</title>
|
||
</head>
|
||
<body>
|
||
|
||
<h1>Aller plus loin avec GNU Emacs</h1>
|
||
|
||
<p>Cette page contient une collection d'astuces pour l'utilisateur
|
||
déjà rompu à GNU Emacs. Si vous êtes débutant et souhaitez vous
|
||
initier à Emacs, allez plutôt voir le <a
|
||
href="&url.tuteurs;unix/editeurs/emacs.html">tutorial</a> de
|
||
tuteurs.</p>
|
||
|
||
<h2>Abréviations</h2>
|
||
|
||
<h3>Principe</h3>
|
||
|
||
<p> Vous connaissez déjà la commande <code>M-/</code> qui permet de
|
||
compléter un mot en cours de frappe (sinon, voir le <a
|
||
href="emacs.html">tutorial</a>. Dans le même genre, emacs gère les
|
||
abréviations.</p>
|
||
|
||
<p>Le mode mineur « abbreviation » vous permet,
|
||
comme son nom l'indique, de définir des abréviations qu'emacs se
|
||
chargera de développer au cours de l'édition du fichier. Par exemple,
|
||
vous pouvez définir l'abréviation ENS qui se développera en
|
||
« École Normale supérieure. »</p>
|
||
|
||
<p>Essayons un peu. Tapez <code>M-x abbrev-mode</code> pour basculer
|
||
dans le mode « abbreviation » (Cf. la <em
|
||
lang="en">mode line</em>). Tapez ensuite l'abréviation de votre choix
|
||
(pour des raisons évidentes, ne choisissez pas un mot existant). Si
|
||
vous souhaitez des abréviations locales (limitées au mode dans lequel
|
||
vous vous trouvez), tapez ensuite <code>C-x ail</code>. Pour les
|
||
abréviations globales (qui s'appliquent à tous les modes), c'est
|
||
<code>C-x aig</code>. Tapez ensuite la version développée, puis
|
||
appuyez sur <code>ENTER</code>. Dorénavant, dans cette session, à
|
||
chaque fois que vous taperez « ENS », emacs
|
||
développera en « École Normale supérieure. »</p>
|
||
|
||
<p>
|
||
Pour sortir du mode abréviation, tapez <code>M-x
|
||
kill-all-abbrevs</code>.
|
||
</p>
|
||
|
||
<h3>Correction d'orthographe à la volée</h3>
|
||
|
||
<p>On peut s'en servir pour faire comme dans MS Word et définir une
|
||
liste de mots sur lesquels on fait tout le temps des coquilles. Genre
|
||
« teh » pour « the » ou « poru » pour « pour ». Il suffit de dire à
|
||
Emacs que ce sont des abréviations pour qu'il les remplace au vol par
|
||
le mot orthographié correctement.</p>
|
||
|
||
<p> Commençons par indiquer à emacs que l'on souhaite utiliser le mode
|
||
abréviation par défaut, que l'on a un fichier d'abréviations qui
|
||
s'appelle <code>~/.abrev</code> et que l'on souhaite sauvegarder ce
|
||
fichier à chaque fois. D'abord, on crée le fichier
|
||
<code>.abrev</code>, vide pour l'instant.</p>
|
||
|
||
<pre>
|
||
<span class="prompt">sas ~ $</span> touch .abrev
|
||
</pre>
|
||
|
||
<p> Puis on indique dans son <code>.emacs</code> : </p>
|
||
|
||
<pre>
|
||
(setq-default abbrev-mode t)
|
||
(read-abbrev-file "~/.abrev")
|
||
(setq save-abbrevs t)
|
||
</pre>
|
||
|
||
<p> Quittez puis relancez emacs tout seul, « Abbrev » figurera dans la
|
||
<em lang="en">mode line</em>. Suivez la procédure décrite
|
||
ci-dessus : on tape l'abréviation, puis <code>C-x aig</code> ou
|
||
<code>C-x ail</code>, l'abréviation développée, puis
|
||
<code>Enter</code>. Répétez l'opération autant de fois que souhaité
|
||
pour constituer votre liste d'abréviations. Ensuite, on sauvegarde
|
||
cette liste : <code>M-x write abbrev-file</code> puis
|
||
<code>Enter</code>. Emacs vous demande alors le nom de votre fichier,
|
||
tapez donc <code>~/.abrev</code> puis <code>Enter</code>.</p>
|
||
|
||
<p>
|
||
Par la suite, pour ajouter de nouvelles abréviations, contentez-vous
|
||
de les définir comme indiqué ci-dessus, emacs vous demandera si vous
|
||
voulez sauvegarder votre fichier d'abréviations. Il suffira de
|
||
répondre oui.
|
||
</p>
|
||
|
||
<p>Pour effacer une abréviation, tapez <code>M-x edit-abbrevs</code>
|
||
qui lance l'éditeur d'abréviations (pour simplement voir la liste,
|
||
c'est <code>M-x list-abbrevs</code>). Ladite liste ressemble à
|
||
ceci :
|
||
</p>
|
||
|
||
<pre>
|
||
(global-abbrev-table)
|
||
|
||
"gwb" 1 "George W. Bush"
|
||
"usa" 1 "États-Unis"
|
||
"pour" 1 "pour"
|
||
</pre>
|
||
|
||
<p>
|
||
Entre parenthèses, emacs vous dit qu'il s'agit d'abréviations globales
|
||
(si elles avaient été locales, vous auriez vu
|
||
<code>(text-mode-abbrev-table)</code>, ou
|
||
<code>(fundamental-mode-abbrev-table)</code>, etc.). La colonne de
|
||
gauche affiche les abréviations proprement dites, la seconde colonne
|
||
est la cuisine interne d'emacs, la colonne de droite contient les
|
||
abréviations développées. Pour effacer une abréviation, utilisez une
|
||
commande standard pour effacer la ligne en question, <code>C-k</code>
|
||
par exemple, puis sauvegardez.
|
||
</p>
|
||
|
||
<div class="attention">Attention, n'essayez pas d'ajouter à la main de
|
||
nouvelles lignes à la liste. Effacer est la seule opération sûre.
|
||
</div>
|
||
|
||
<h2>Bookmarks</h2>
|
||
|
||
<p>Vous connaissez les bookmarks (alias « signets » pour Netscape ou
|
||
« favoris » pour Internet Explorer) dans un navigateur. Eh bien dans
|
||
emacs, il y en a aussi. Ils jouent très exactement le rôle de
|
||
marque-pages : vous pouvez ainsi retrouver exactement l'endroit
|
||
où vous en étiez d'une session à l'autre.
|
||
</p>
|
||
|
||
<table class="tableau">
|
||
<tr><th>Commande</th><th>Commande complète</th><th>Action</th></tr>
|
||
<tr><td>C-x r m <code>Enter</code></td><td>_</td><td>Pose un bookmark à
|
||
l'endroit où se trouve le point</td>
|
||
</tr><tr>
|
||
<td>C-x r m <nom> <code>Enter</code></td><td>M-x
|
||
bookmark-set</td><td>Pose un bookmark et lui donne un nom</td>
|
||
</tr><tr>
|
||
<td>_</td><td>M-x bookmark-delete <nom></td><td>Détruit le bookmark <nom></td>
|
||
</tr><tr>
|
||
<td>C-x r b <nom></td><td>M-x bookmark-jump</td><td>Aller au
|
||
bookmark <nom></td>
|
||
</tr><tr>
|
||
<td>C-x r l</td><td>M-x bookmark-list</td><td>Lister tous les bookmarks</td>
|
||
</tr><tr>
|
||
<td>_</td><td>M-x bookmark-file</td><td>Sauve les bookmarks</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<h2>Histoires de répertoires (Dired)</h2>
|
||
|
||
<p>
|
||
Emacs vous permet d'agir sur vos répertoires : regarder le
|
||
contenu d'un répertoire, effacer des fichiers, les renommer, les
|
||
copier, etc. Bref, tout ce que vous faites d'ordinaire avec les
|
||
commandes <code>cp</code>, <code>rm</code> ou encore <code>mv</code>
|
||
sous UNIX. Tout cela, grâce à Dired (DIRectory EDitor)...
|
||
</p>
|
||
|
||
<p>
|
||
Commençons par demander à Emacs de lire un répertoire. Par exemple, le
|
||
répertoire <code>armoire/</code> de tuteurs.
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">sas ~ $</span> emacs ~tuteurs/armoire
|
||
</pre>
|
||
|
||
<p>
|
||
On obtient alors le résultat suivant, similaire à ce que vous aurait
|
||
donné un <code>ls -la</code> sur le même répertoire :
|
||
</p>
|
||
|
||
<pre>
|
||
/users/staffs/tuteurs/armoire:
|
||
used 8 available 222601
|
||
drwxr-xr-x 3 tuteurs 512 Jan 8 02:30 .
|
||
drwxr-xr-x 30 tuteurs 2560 Apr 1 20:06 ..
|
||
drwxr-xr-x 2 tuteurs 512 Jan 8 02:32 affiche
|
||
-rw-r--r-- 1 tuteurs 1334 Oct 14 2002 inventaire.txt
|
||
-rw-r--r-- 1 tuteurs 954 Nov 14 11:24 livres.txt
|
||
</pre>
|
||
|
||
<p> Vous pouvez vous déplacer dans Dired à l'aide de la touche
|
||
<code>n</code>, de la barre d'espace ou encore de
|
||
<code>C-n</code>. Pour éditer un fichier, appuyez sur
|
||
<code>e</code>. Pour simplement jeter un coup d'œil au fichier,
|
||
<code>v</code> demande à emacs d'afficher le fichier dans un buffer en
|
||
lecture seule appelé « View ». On quitte ce buffer avec un simple
|
||
<code>q</code>.
|
||
</p>
|
||
|
||
<div class="attention">Avant toutes choses, attention : dans
|
||
Dired, vous travaillez directement sur vos fichiers, pas par
|
||
l'intermédiaire d'un buffer. Quand vous effacez un fichier, c'est
|
||
définitif.
|
||
</div>
|
||
|
||
<p>
|
||
Autre remarque : si vous modifiez le contenu de votre directoire
|
||
en dehors de Dired (par exemple, en suspendant emacs pour revenir au
|
||
shell), il faudra relancer Dired pour prendre en compte les
|
||
modifications du disque (<code>C-x C-f <répertoire></code>).
|
||
</p>
|
||
|
||
<h3>Effacer un fichier</h3>
|
||
|
||
<p>Le mécanisme est identique que celui pour effacer un buffer dans la
|
||
liste des buffers (<code>C-x C-b</code>). Placez votre curseur sur la
|
||
bonne ligne puis tapez sur <code>d</code>. Un « D » apparaît alors sur
|
||
la ligne, tout à gauche :</p>
|
||
|
||
<pre>
|
||
/users/staffs/tuteurs/armoire:
|
||
used 8 available 222601
|
||
drwxr-xr-x 3 tuteurs 512 Jan 8 02:30 .
|
||
drwxr-xr-x 30 tuteurs 2560 Apr 1 20:06 ..
|
||
D drwxr-xr-x 2 tuteurs 512 Jan 8 02:32 affiche
|
||
-rw-r--r-- 1 tuteurs 1334 Oct 14 2002 inventaire.txt
|
||
D -rw-r--r-- 1 tuteurs 954 Nov 14 11:24 livres.txt
|
||
</pre>
|
||
|
||
<p>
|
||
Pour aller plus rapidement, <code>#</code> marque comme à effacer tous
|
||
les fichiers d'auto-save (ceux dont le nom commence et finit par des
|
||
#, précisément) et <code>~</code>, tous les fichiers de backup (dont
|
||
le nom finit en ~). Pour enlever la marque d'effacement d'un fichier,
|
||
appuyez sur <code>u</code> (comme « <em lang="en">undelete</em> »).
|
||
</p>
|
||
|
||
<p>
|
||
Quand vous avez fini, et que vous souhaitez vraiment détruire les
|
||
fichiers, tapez <code>x</code>. Emacs vous demandera de confirmer la
|
||
destruction des fichiers marqués.
|
||
</p>
|
||
|
||
<h3>Copier et renommer</h3>
|
||
|
||
<p> Pour copier, tapez <code>C</code> (ou <code>M-x
|
||
dired-do-copy</code>) sur le fichier à copier. Emacs vous demande
|
||
alors le nom du nouveau fichier. Pour renommer, même principe en
|
||
tapant <code>R</code> (ou <code>M-x dired-do-move</code>).</p>
|
||
|
||
<h3>Récapitulons</h3>
|
||
|
||
<p> Dired vous permet de faire quasiment toutes les opérations sur
|
||
fichier ou répertoire que les commandes UNIX standard. Le tableau
|
||
suivant récapitule des points déjà expliqués et vous présente d'autres
|
||
possibilités. </p>
|
||
|
||
<table class="tableau">
|
||
<tr>
|
||
<th>Commande</th><th>Nom complet</th><th>Action</th><th>Équivalent UNIX</th>
|
||
</tr><tr>
|
||
<td>e</td><td>_</td><td>Éditer le fichier</td><td>emacs</td>
|
||
</tr><tr>
|
||
<td>R</td><td>M-x dired-do-rename</td><td>Renommer le
|
||
fichier</td><td>cp</td>
|
||
</tr><tr>
|
||
<td>C</td><td>M-x dired-do-copy</td><td>Renommer le
|
||
fichier</td><td>mv</td>
|
||
</tr><tr>
|
||
<td>d</td><td>M-x dired-do-delete</td><td>Marquer pour
|
||
l'effacement</td><td>rm</td>
|
||
</tr><tr>
|
||
<td>~</td><td>_</td><td>Marquer pour l'effacement tous les fichiers de
|
||
backup</td><td>rm *~</td>
|
||
</tr><tr>
|
||
<td>#</td><td>_</td><td>Marquer pour l'effacement tous les fichiers
|
||
d'autosave</td><td>rm *#</td>
|
||
</tr><tr>
|
||
<td>u</td><td>_</td><td>Enlever la marque d'effacement</td><td>_</td>
|
||
</tr><tr>
|
||
<td>+</td><td>M-x dired-create-directory</td><td>Créer un
|
||
répertoire</td><td>mkdir</td>
|
||
</tr><tr>
|
||
<td>M</td><td>M-x dired-do-chmod</td><td>Changer les droits
|
||
d'accès</td><td>chmod</td>
|
||
</tr><tr>
|
||
<td>G</td><td>M-x dired-do-chgrp</td><td>Changer le
|
||
groupe</td><td>chgrp</td>
|
||
</tr><tr>
|
||
<td>O</td><td>M-x dired-do-chown</td><td>Changer le propriétaire du
|
||
fichier</td><td>chown</td>
|
||
</tr><tr>
|
||
<td>S</td><td>M-x dired-do-symlink</td><td>Faire un lien
|
||
symbolique</td><td>ln -s</td>
|
||
</tr><tr>
|
||
<td>H</td><td>M-x dired-do-hardlink</td><td>Faire un lien
|
||
dur</td><td>ln</td>
|
||
</tr><tr>
|
||
<td>Z</td><td>M-x dired-do-compress</td><td>Compresse un fichier (avec
|
||
<a href="&url.tuteurs;unix/archives.html">gunzip</a>)</td><td>gzip</td>
|
||
</tr>
|
||
</table>
|
||
|
||
|
||
<h2>Lire les pages de man</h2>
|
||
|
||
<p>Vous pouvez également lire des pages de man directement dans
|
||
emacs, grâce à la commande <code>M-x man</code>. Appuyez sur
|
||
<code>Enter</code>, puis emacs vous demandera quelle page de man vous
|
||
souhaitez lire. Par défaut, il s'agit du mot sur lequel est placé
|
||
votre curseur. Vous pouvez également spécifier la section dans
|
||
laquelle se trouve la page recherchée. Par exemple, vous recherchez la
|
||
page de man du test, célèbre distraction normalienne, qui se trouve
|
||
dans la section I : </p>
|
||
|
||
<pre>
|
||
Manual entry: test I
|
||
</pre>
|
||
|
||
<p>
|
||
Ce qui vous donne :
|
||
</p>
|
||
|
||
<pre>
|
||
Misc. Manual Pages TEST(I)
|
||
|
||
NAME
|
||
test - distraction normalienne
|
||
|
||
DESCRIPTION
|
||
Le test est une distraction spécifiquement normalienne. Le
|
||
test consiste à dire ou faire quelque chose avec l'intention
|
||
de tirer de son interlocuteur une réaction précise. Si
|
||
cette réaction se produit effectivement, on dira « test »,
|
||
--11:%%-F1 *Man test I* { page 1 of 1} (Man)--L1--Top---------------------
|
||
</pre>
|
||
|
||
<p> Il est plus facile de lire une page de man dans emacs qu'en
|
||
invoquant la commande <code>man</code> dans le shell. Seul
|
||
inconvénient : vous ne pouvez pas interrompre emacs pendant qu'il
|
||
est en train de mouliner à la recherche de la page de man demandée,
|
||
pas même avec <code>C-g</code>... </p>
|
||
|
||
<h2>Utiliser des <i lang="en">time stamps</i></h2>
|
||
|
||
<p>
|
||
Ce qu'on appelle <i lang="en">time stamp</i> ici, c'est la date
|
||
précise d'un événement. Emacs permet d'insérer automatiquement des
|
||
time stamps, typiquement pour indiquer la date de dernière
|
||
modification d'un fichier.
|
||
</p>
|
||
|
||
<p>
|
||
Par exemple, pour insérer automatiquement la date à chaque sauvegarde
|
||
du fichier, commencez par écrire dans votre <code>.emacs</code> :
|
||
</p>
|
||
|
||
<pre>
|
||
(add-hook 'write-file-hooks 'time-stamp)
|
||
</pre>
|
||
|
||
<p>
|
||
Ensuite, dans votre fichier, indiquez <em>dans les 8 premières
|
||
lignes</em> :
|
||
</p>
|
||
|
||
<pre>
|
||
Time-stamp: <>
|
||
</pre>
|
||
|
||
<p>
|
||
Lors de votre prochaine sauvegarde, emacs indiquera la date entre les
|
||
<> :
|
||
</p>
|
||
|
||
<pre>
|
||
Time-stamp: <2003-07-27 22:18:53 monlogin>
|
||
</pre>
|
||
|
||
<p>
|
||
Comme vous le voyez, par défaut la date est indiquée au format
|
||
année-mois-jour, suivie de votre login. À chaque fois que vous
|
||
sauvegarderez ce fichier, emacs mettra à jour la date.
|
||
</p>
|
||
|
||
<h2>Emacs comme shell de login</h2>
|
||
|
||
<p>
|
||
Non, je rigole...</p>
|
||
|
||
<div class="metainformation">Auteur : Marie-Lan Nguyen. <date value="from git" />
|
||
</div>
|
||
|
||
</body>
|
||
</html>
|