tuteurs.ens.fr/unix/editeurs/super_emacs.tml

392 lines
13 KiB
Text
Raw Normal View History

<?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 &#171; abbreviation &#187; 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
&#171; École Normale supérieure. &#187;</p>
<p>Essayons un peu. Tapez <code>M-x abbrev-mode</code> pour basculer
dans le mode &#171; abbreviation &#187; (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 &#171; ENS &#187;, emacs
développera en &#171; École Normale supérieure. &#187;</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">clipper ~ $</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, utiliser 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 &lt;nom&gt; <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 &lt;nom&gt;</td><td>Détruit le bookmark &lt;nom&gt;</td>
</tr><tr>
<td>C-x r b &lt;nom&gt;</td><td>M-x bookmark-jump</td><td>Aller au
bookmark &lt;nom&gt;</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">clipper ~ $</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'&oelig;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 &lt;répertoire&gt;</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: &lt;&gt;
</pre>
<p>
Lors de votre prochaine sauvegarde, emacs indiquera la date entre les
&lt;&gt; :
</p>
<pre>
Time-stamp: &lt;2003-07-27 22:18:53 monlogin&gt;
</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. Dernière
modification : le <date value="$Date: 2007-07-17 10:03:30 $" />.
</div>
</body>
</html>