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

392 lines
13 KiB
Text
Raw Normal View History

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
"tuteurs://DTD/tml.dtd">
<html>
<head>
<title>Emacs avanc<6E></title>
</head>
<body>
<h1>Aller plus loin avec GNU Emacs</h1>
<p>Cette page contient une collection d'astuces pour l'utilisateur
d<EFBFBD>j<EFBFBD> rompu <20> GNU Emacs. Si vous <20>tes d<>butant et souhaitez vous
initier <20> Emacs, allez plut<75>t voir le <a
href="&url.tuteurs;unix/editeurs/emacs.html">tutorial</a> de
tuteurs.</p>
<h2>Abr<62>viations</h2>
<h3>Principe</h3>
<p> Vous connaissez d<>j<EFBFBD> la commande <code>M-/</code> qui permet de
compl<EFBFBD>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<EFBFBD>viations.</p>
<p>Le mode mineur &#171;<3B>abbreviation<6F>&#187; vous permet,
comme son nom l'indique, de d<>finir des abr<62>viations qu'emacs se
chargera de d<>velopper au cours de l'<27>dition du fichier. Par exemple,
vous pouvez d<>finir l'abr<62>viation ENS qui se d<>veloppera en
&#171;<3B><>cole Normale sup<75>rieure.<2E>&#187;</p>
<p>Essayons un peu. Tapez <code>M-x abbrev-mode</code> pour basculer
dans le mode &#171;<3B>abbreviation<6F>&#187; (Cf. la <em
lang="en">mode line</em>). Tapez ensuite l'abr<62>viation de votre choix
(pour des raisons <20>videntes, ne choisissez pas un mot existant). Si
vous souhaitez des abr<62>viations locales (limit<69>es au mode dans lequel
vous vous trouvez), tapez ensuite <code>C-x ail</code>. Pour les
abr<EFBFBD>viations globales (qui s'appliquent <20> tous les modes), c'est
<code>C-x aig</code>. Tapez ensuite la version d<>velopp<70>e, puis
appuyez sur <code>ENTER</code>. Dor<6F>navant, dans cette session, <20>
chaque fois que vous taperez &#171;<3B>ENS<4E>&#187;, emacs
d<EFBFBD>veloppera en &#171;<3B><>cole Normale sup<75>rieure.<2E>&#187;</p>
<p>
Pour sortir du mode abr<62>viation, tapez <code>M-x
kill-all-abbrevs</code>.
</p>
<h3>Correction d'orthographe <20> la vol<6F>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
<EFBFBD><EFBFBD>teh<EFBFBD><EFBFBD> pour <20><>the<68><65> ou <20><>poru<72><75> pour <20><>pour<75><72>. Il suffit de dire <20>
Emacs que ce sont des abr<62>viations pour qu'il les remplace au vol par
le mot orthographi<68> correctement.</p>
<p> Commen<65>ons par indiquer <20> emacs que l'on souhaite utiliser le mode
abr<EFBFBD>viation par d<>faut, que l'on a un fichier d'abr<62>viations qui
s'appelle <code>~/.abrev</code> et que l'on souhaite sauvegarder ce
fichier <20> chaque fois. D'abord, on cr<63>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><3E>: </p>
<pre>
(setq-default abbrev-mode t)
(read-abbrev-file "~/.abrev")
(setq save-abbrevs t)
</pre>
<p> Quittez puis relancez emacs tout seul, <20><>Abbrev<65><76> figurera dans la
<em lang="en">mode line</em>. Suivez la proc<6F>dure d<>crite
ci-dessus<75>: on tape l'abr<62>viation, puis <code>C-x aig</code> ou
<code>C-x ail</code>, l'abr<62>viation d<>velopp<70>e, puis
<code>Enter</code>. R<>p<EFBFBD>tez l'op<6F>ration autant de fois que souhait<69>
pour constituer votre liste d'abr<62>viations. Ensuite, on sauvegarde
cette liste<74>: <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<62>viations, contentez-vous
de les d<>finir comme indiqu<71> ci-dessus, emacs vous demandera si vous
voulez sauvegarder votre fichier d'abr<62>viations. Il suffira de
r<EFBFBD>pondre oui.
</p>
<p>Pour effacer une abr<62>viation, tapez <code>M-x edit-abbrevs</code>
qui lance l'<27>diteur d'abr<62>viations (pour simplement voir la liste,
c'est <code>M-x list-abbrevs</code>). Ladite liste ressemble <20>
ceci<EFBFBD>:
</p>
<pre>
(global-abbrev-table)
"gwb" 1 "George W. Bush"
"usa" 1 "<22>tats-Unis"
"pour" 1 "pour"
</pre>
<p>
Entre parenth<74>ses, emacs vous dit qu'il s'agit d'abr<62>viations globales
(si elles avaient <20>t<EFBFBD> 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<62>viations proprement dites, la seconde colonne
est la cuisine interne d'emacs, la colonne de droite contient les
abr<EFBFBD>viations d<>velopp<70>es. Pour effacer une abr<62>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 <20> la main de
nouvelles lignes <20> la liste. Effacer est la seule op<6F>ration s<>re.
</div>
<h2>Bookmarks</h2>
<p>Vous connaissez les bookmarks (alias <20><>signets<74><73> pour Netscape ou
<EFBFBD><EFBFBD>favoris<EFBFBD><EFBFBD> pour Internet Explorer) dans un navigateur. Eh bien dans
emacs, il y en a aussi. Ils jouent tr<74>s exactement le r<>le de
marque-pages<65>: vous pouvez ainsi retrouver exactement l'endroit
o<EFBFBD> vous en <20>tiez d'une session <20> l'autre.
</p>
<table class="tableau">
<tr><th>Commande</th><th>Commande compl<70>te</th><th>Action</th></tr>
<tr><td>C-x r m <code>Enter</code></td><td>_</td><td>Pose un bookmark <20>
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<65>: 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<67>ce <20> Dired (DIRectory EDitor)...
</p>
<p>
Commen<EFBFBD>ons par demander <20> Emacs de lire un r<>pertoire. Par exemple, le
r<EFBFBD>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 <20> ce que vous aurait
donn<EFBFBD> un <code>ls -la</code> sur le m<>me r<>pertoire<72>:
</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 <20> l'aide de la touche
<code>n</code>, de la barre d'espace ou encore de
<code>C-n</code>. Pour <20>diter un fichier, appuyez sur
<code>e</code>. Pour simplement jeter un coup d'&oelig;il au fichier,
<code>v</code> demande <20> emacs d'afficher le fichier dans un buffer en
lecture seule appel<65> <20><>View<65><77>. On quitte ce buffer avec un simple
<code>q</code>.
</p>
<div class="attention">Avant toutes choses, attention<6F>: dans
Dired, vous travaillez directement sur vos fichiers, pas par
l'interm<72>diaire d'un buffer. Quand vous effacez un fichier, c'est
d<EFBFBD>finitif.
</div>
<p>
Autre remarque<75>: 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 <20><>D<EFBFBD><44> appara<72>t alors sur
la ligne, tout <20> gauche<68>:</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 <20> effacer tous
les fichiers d'auto-save (ceux dont le nom commence et finit par des
#, pr<70>cis<69>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 <20><><em lang="en">undelete</em><3E><>).
</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<71>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 <20> 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<6F>rations sur
fichier ou r<>pertoire que les commandes UNIX standard. Le tableau
suivant r<>capitule des points d<>j<EFBFBD> expliqu<71>s et vous pr<70>sente d'autres
possibilit<EFBFBD>s. </p>
<table class="tableau">
<tr>
<th>Commande</th><th>Nom complet</th><th>Action</th><th><3E>quivalent UNIX</th>
</tr><tr>
<td>e</td><td>_</td><td><3E>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<43>er un
r<EFBFBD>pertoire</td><td>mkdir</td>
</tr><tr>
<td>M</td><td>M-x dired-do-chmod</td><td>Changer les droits
d'acc<63>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<72>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 <20>galement lire des pages de man directement dans
emacs, gr<67>ce <20> 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<61>
votre curseur. Vous pouvez <20>galement sp<73>cifier la section dans
laquelle se trouve la page recherch<63>e. Par exemple, vous recherchez la
page de man du test, c<>l<EFBFBD>bre distraction normalienne, qui se trouve
dans la section I<>: </p>
<pre>
Manual entry: test I
</pre>
<p>
Ce qui vous donne<6E>:
</p>
<pre>
Misc. Manual Pages TEST(I)
NAME
test - distraction normalienne
DESCRIPTION
Le test est une distraction sp<73>cifiquement normalienne. Le
test consiste <20> dire ou faire quelque chose avec l'intention
de tirer de son interlocuteur une r<>action pr<70>cise. Si
cette r<>action se produit effectivement, on dira <20><>test<73><74>,
--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<EFBFBD>nient<EFBFBD>: vous ne pouvez pas interrompre emacs pendant qu'il
est en train de mouliner <20> la recherche de la page de man demand<6E>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<EFBFBD>cise d'un <20>v<EFBFBD>nement. Emacs permet d'ins<6E>rer automatiquement des
time stamps, typiquement pour indiquer la date de derni<6E>re
modification d'un fichier.
</p>
<p>
Par exemple, pour ins<6E>rer automatiquement la date <20> chaque sauvegarde
du fichier, commencez par <20>crire dans votre <code>.emacs</code><3E>:
</p>
<pre>
(add-hook 'write-file-hooks 'time-stamp)
</pre>
<p>
Ensuite, dans votre fichier, indiquez <em>dans les 8 premi<6D>res
lignes</em><3E>:
</p>
<pre>
Time-stamp: &lt;&gt;
</pre>
<p>
Lors de votre prochaine sauvegarde, emacs indiquera la date entre les
&lt;&gt;<3B>:
</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<71>e au format
ann<EFBFBD>e-mois-jour, suivie de votre login. <20> chaque fois que vous
sauvegarderez ce fichier, emacs mettra <20> jour la date.
</p>
<h2>Emacs comme shell de login</h2>
<p>
Non, je rigole...</p>
<div class="metainformation">Auteur<75>: Marie-Lan Nguyen. Derni<6E>re
modification<EFBFBD>: le <date value="$Date: 2007-07-17 10:03:30 $" />.
</div>
</body>
</html>