Skip to content
Snippets Groups Projects
Commit ecf7e1ef authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Continue à décrire les raccourcis de base

parent 424383ea
No related branches found
No related tags found
No related merge requests found
#+STARTUP: org-pretty-entities entitiespretty #+STARTUP: org-pretty-entities entitiespretty
#+PROPERTY: header-args :comments yes :results silent #+PROPERTY: header-args :comments yes :results silent
#+options: h:3 num:t toc:3 #+OPTIONS: h:3 num:t toc:3
#+TITLE:Un court tutoriel pour Emacs
#+OPTIONS: author:nil date:nil
#+LATEX_HEADER: \usepackage[hmargin=2.5cm,vmargin=1.5cm]{geometry}
#+LATEX_HEADER_EXTRA: \usepackage{mdframed} #+LATEX_HEADER_EXTRA: \usepackage{mdframed}
#+LATEX_HEADER_EXTRA: \BeforeBeginEnvironment{minted}{\begin{mdframed}} #+LATEX_HEADER_EXTRA: \BeforeBeginEnvironment{minted}{\begin{mdframed}}
...@@ -43,9 +46,10 @@ Emacs sans utiliser la configuration locale. ...@@ -43,9 +46,10 @@ Emacs sans utiliser la configuration locale.
* Prise en main * Prise en main
La prise en main d'Emacs n'est pas difficile pour une utilisation La prise en main d'Emacs n'est pas difficile pour une utilisation
basic. En mode graphique Emacs dispose de menus qui permettent les basique. En mode graphique Emacs dispose de menus qui permettent
opérations classiques. Néanmoins, pour l'utiliser plus efficacement, d'accéder à toutes les opérations classiques. Néanmoins, pour
il convient de comprendre un peu son fonctionnement. l'utiliser plus efficacement, il convient de comprendre un peu son
fonctionnement.
Comme on l'a dit, Emacs a vu le jour comme un ensemble de *macros*, Comme on l'a dit, Emacs a vu le jour comme un ensemble de *macros*,
c'est-à-dire des enchaînements de commandes simples ou d'autres c'est-à-dire des enchaînements de commandes simples ou d'autres
...@@ -91,7 +95,7 @@ fenêtres et il peut être modifié dans n'importe laquelle de ses vues. ...@@ -91,7 +95,7 @@ fenêtres et il peut être modifié dans n'importe laquelle de ses vues.
*** <<sec:frames>> Cadre (/frames/) *** <<sec:frames>> Cadre (/frames/)
Lorsqu'il est exécuté en mode graphique, un même instance d'Emacs peut Lorsqu'il est exécuté en mode graphique, un même instance d'Emacs peut
proposer plusieurs /frames/ (cadres). Il s'agit en fait de proposer plusieurs cadres (/frames/). Il s'agit en fait de
plusieurs fenêtres du gestionnaire graphique. plusieurs fenêtres du gestionnaire graphique.
Dans l'exemple de la figure [[fig:deux-frames]], il s'agit bien de la même Dans l'exemple de la figure [[fig:deux-frames]], il s'agit bien de la même
...@@ -117,16 +121,16 @@ enfin, on travaille sur la branche ~develop~. ...@@ -117,16 +121,16 @@ enfin, on travaille sur la branche ~develop~.
#+NAME: fig:emacs-modeline #+NAME: fig:emacs-modeline
[[file:emacs-modeline.png]] [[file:emacs-modeline.png]]
*** /mini-buffer/ *** /Minibuffer/
Le /mini-buffer/ est un /buffer/ spécial d'Emacs. C'est la zone Le /minibuffer/ est un /buffer/ spécial d'Emacs. C'est la zone
d'interaction avec l'utilisateur. C'est là qu'on doit répondre aux d'interaction avec l'utilisateur. C'est là qu'on doit répondre aux
éventuelles questions d'Emacs et c'est là qu'on tape les commandes. Il éventuelles questions d'Emacs et c'est là qu'on tape les commandes. Il
faut donc le garder constamment à l'oeil. Voir la faut donc le garder constamment à l'oeil. Voir la
figure [[fig:emacs-minibuffer]] (ici une exécution de ~grep~ dans Emacs en figure [[fig:emacs-minibuffer]] (ici une exécution de ~grep~ dans Emacs en
préparation). Pour exécuter une commande dans le /mini-buffer/ il faut préparation). Pour exécuter une commande dans le /minibuffer/ il faut
taper ~M-x~. taper ~M-x~.
#+CAPTION: Le /mini-buffer/ en action. Préparation de l'exécution d'une commande ~grep~ dans Emacs. #+CAPTION: Le /minibuffer/ en action. Préparation de l'exécution d'une commande ~grep~ dans Emacs.
#+NAME: fig:emacs-minibuffer #+NAME: fig:emacs-minibuffer
[[file:emacs-minibuffer.png]] [[file:emacs-minibuffer.png]]
...@@ -167,9 +171,9 @@ On ne liste ici que quelques unes des commandes (et raccourcis), ...@@ -167,9 +171,9 @@ On ne liste ici que quelques unes des commandes (et raccourcis),
seulement une liste de celles qu'on juge importantes. seulement une liste de celles qu'on juge importantes.
Noter que cette configuration utilise le mode ~which-key~, dont l'une Noter que cette configuration utilise le mode ~which-key~, dont l'une
des fonctionnalités est de fournir une aide dans le /mini-buffer/ lors des fonctionnalités est de fournir une aide dans le /minibuffer/ lors
de la saisie de commandes. Par exemple, si on tape ~C-x~, au bout d'un de la saisie de commandes. Par exemple, si on tape ~C-x~, au bout d'un
instant ~which-key~ affiche dans le /mini-buffer/ la liste des instant ~which-key~ affiche dans le /minibuffer/ la liste des
commandes qui commencent par ~C-x~. C'est donc un excellent moyens de commandes qui commencent par ~C-x~. C'est donc un excellent moyens de
retrouver les raccourcis et d'en apprendre de nouveaux. Cette aide est retrouver les raccourcis et d'en apprendre de nouveaux. Cette aide est
évidemment contextuelle. évidemment contextuelle.
...@@ -180,47 +184,130 @@ retrouver les raccourcis et d'en apprendre de nouveaux. Cette aide est ...@@ -180,47 +184,130 @@ retrouver les raccourcis et d'en apprendre de nouveaux. Cette aide est
| ~C-x C-c~ | Sort d'Emacs | | ~C-x C-c~ | Sort d'Emacs |
| ~C-g~ | Interrompt la commande en cours | | ~C-g~ | Interrompt la commande en cours |
| ~C-S-g~ | Force l'interruption de la commande | | ~C-S-g~ | Force l'interruption de la commande |
| ~M-x~ | Lance une commande (dans le /mini-buffer/) | | ~M-x~ | Lance une commande (dans le /minibuffer/) |
| ~C-_~ ou ~C-/~ ou ~C-x u~ | Annule la dernière saisie/commande |
** /minibuffer/
Lors d'une interaction avec le /minibuffer/, on a accès à certains
raccourcis qui facilitent son utilisation.
| Raccourci | Description |
|---------------+--------------------------------------------------|
| ~M-x~ | Lance une interaction dans le /minibuffer/ |
| ~C-x ESC ESC~ | Édite la dernière commande dans le /minibuffer/ |
| ~TAB~ | Complète l'entrée autant que possible |
Cette configuration utilise ~swiper~, donc toutes les interactions
effectuées dans le /minibuffer/ proposent la liste des commandes
disponibles qui correspondent à la chaîne entrée (~SPC~ faisant office
de n'importe quelle liste de caractères). Il est alors possible de
naviguer dans cette liste (en utilisant les flèches du clavier pas
exemple)
** Obtenir de l'aide ** Obtenir de l'aide
On peut lancer l'aide en tapant ~C-h~ et en suivant les indications du On peut lancer l'aide en tapant ~C-h~ et en suivant les indications du
/mini-buffer/. /minibuffer/.
| Raccourci | Description | | Raccourci | Description |
|-----------+------------------------------------------------| |-----------+------------------------------------------------|
| ~C-h t~ | Lance le tutoriel intégré | | ~C-h t~ | Lance le tutoriel intégré |
| ~C-h m~ | Informations sur le mode courant | | ~C-h m~ | Informations sur le mode courant |
| ~C-h a~ | *à propos* (interaction dans le /mini-buffer/) | | ~C-h a~ | *à propos* (interaction dans le /minibuffer/) |
** Naviguer dans un /buffer/ ** Naviguer dans un /buffer/
Au delà des flèches et autres touches usuelles du clavier, Emacs Au delà des flèches et autres touches usuelles du clavier, Emacs
propose d'autres moyens de se déplacer dans un /buffer/. propose d'autres moyens de se déplacer dans un /buffer/.
| Raccourci | Description | | Raccourci | Description |
|-----------+------------------------------------| |------------------+--------------------------------------------------|
| ~C-b~ | Recule d'un caractère | | ~C-b~ | Recule d'un caractère |
| ~C-f~ | Avance d'un caractère | | ~C-f~ | Avance d'un caractère |
|-----------+------------------------------------| |------------------+--------------------------------------------------|
| ~M-b~ | Recule d'un mot | | ~M-b~ | Recule d'un mot |
| ~M-f~ | Avance d'un mot | | ~M-f~ | Avance d'un mot |
|-----------+------------------------------------| |------------------+--------------------------------------------------|
| ~C-p~ | Ligne précédente | | ~C-p~ | Ligne précédente |
| ~C-n~ | Ligne suivante | | ~C-n~ | Ligne suivante |
|-----------+------------------------------------| |------------------+--------------------------------------------------|
| ~C-a~ | Début de ligne | | ~C-a~ | Début de ligne |
| ~C-e~ | Fin de ligne | | ~C-e~ | Fin de ligne |
|-----------+------------------------------------| |------------------+--------------------------------------------------|
| ~M-a~ | Début de la phrase | | ~M-a~ | Début de la phrase |
| ~M-e~ | Fin de la phrase | | ~M-e~ | Fin de la phrase |
| ~M-m~ | Début de l'indentation | | ~M-m~ | Début de l'indentation |
|-----------+------------------------------------| |------------------+--------------------------------------------------|
| ~M-g g~ | Aller à la ligne d'un numéro donné | | ~M-g g~ /numéro/ | Positionne le curseur à la ligne numéro /numéro/ |
| | |
Noter qu'on peut généralement utiliser des combinaisons de ~Ctrl~, Noter qu'on peut généralement utiliser des combinaisons de ~Ctrl~,
~Meta~,... avec les touches de déplacement du clavier (comme les ~Meta~,... avec les touches de déplacement du clavier (comme les
flèches). flèches).
** Marquer une zone d'un /buffer/
Une zone est délimitée par une une *marque* (position de départ) et la
position courante du curseur Créer une zone consiste donc à poser une
*marque*, puis à déplacer le curseur pour la délimiter. Tous les
caractères compris entre ces deux positions font partie de la zone.
| Raccourci | Description |
|------------------+------------------------------------------|
| ~C-SPC~ ou ~C-@~ | Pose une *marque* |
| ~C-g~ | Supprime la *marque* |
| ~C-x C-x~ | Inverse la *marque* et le curseur |
| ~C-=~ | Sélectionne un mot ou étend la sélection |
Noter qu'un enchaînement de ~C-=~ permet d'étendre rapidement la zone
aux entités faisant sens. En effet, ~C-=~ s'arrête aux guillemets
encadrant une chaîne de caractères, aux paramètres ou au corps d'une
fonction par exemple, ce qui permet de facilement les sélectionner.
** Éditer le contenu d'un /buffer/
Le commandes citées ici concernent essentiellement les *modes*
d'édition classiques. Il est possible que pour certains modes les
raccourcis ne fonctionnent pas ou n'aient simplement pas de sens.
Dans ces modes d'édition (modes de saisie par exemple), le clavier
fonctionne normalement. On précise simplement ici quelques commandes
usuelles.
L'action des commandes d'édition décrites ci-dessous est effectuée
relativement à la position courante du curseur.
| Raccourci | Description |
|---------------------------+---------------------------------------|
| ~DEL~ | *Efface* un caractère vers la gauche |
| ~C-d~ ou ~SUPR~ | *Efface* le caractère sous le curseur |
|---------------------------+---------------------------------------|
| ~DEL~ ou ~SUPR~ | *Efface* une zone sélectionnée |
|---------------------------+---------------------------------------|
| ~C-DEL~, ~M-DEL~ ou ~C-w~ | *Coupe* le mot vers la gauche |
| ~M-d~ | *Coupe* le mot vers la droite |
|---------------------------+---------------------------------------|
| ~M-0 C-k~ | *Coupe* jusqu'au début de la ligne |
| ~C-k~ | *Coupe* jusqu'à la fin de la ligne |
|---------------------------+---------------------------------------|
| ~C-w~ | *Coupe* une zone sélectionnée |
| ~M-w~ | *Copie* une zone sélectionnée |
| ~M-z~ /caractère/ | *Coupe* jusqu'au /caractère/ |
|---------------------------+---------------------------------------|
| ~C-_~ ou ~C-/~ ou ~C-x u~ | Annule la dernière saisie/commande |
Noter que pour cette configuration d'Emacs, si le caractère à effacer
est un caractère blanc, tous les blancs suivants dans la direction
d'effacement sont supprimés.
Puisqu'on vient d'aborder comment *couper* une zone du texte, nous
allons aborder maintenant le *coller*. La encore, le vocable Emacs
n'est pas standard. L'action *couper* dans Emacs se nomme */kill/* et
*coller*, */yank/*. On comprend ainsi mieux les choix de lettres ~k~
et ~y~ dans ce contexte.
| Raccourci | Description |
|-----------+-------------------------------------------------|
| ~C-y~ | *Colle* la dernière sélection *copiée* |
| ~M-y~ | Remplace le texte collé par la copie précédente |
En fait, Emacs conserve toutes les copies en mémoire (/kill-ring/) et
on peut donc les utiliser à tout moment. Dans sa version de base,
parcourir le /kill-ring/ nécessite d'abord un *coller*. C'est-à-dire
qu'il faut effectuer ~C-y~ and de taper ~M-y~ pour le parcourir.
Cette configuration d'Emacs utilise ~swiper~ et le parcours du
/kill-ring/ est amélioré. En effet, ~swiper~ propose l'utilisation
directe de ~M-y~ et plutôt que de remplacer le texte /en ligne/ comme
le fait la version de base, on y accède dans le /minibuffer/. On peut
alors le parcourir, soit en continuant à presser ~M-y~, soit en
utilisant les flèches du clavier, soit même en entrant les une partie
du texte comme pour les [[tab:recherche][recherches]].
** Gestion des /buffers/, fenêtres et cadres ** Gestion des /buffers/, fenêtres et cadres
*** /buffers/ *** /buffers/
Dans cette configuration, on utilise le paquet ~IBuffer~ à la place du Dans cette configuration, on utilise le paquet ~IBuffer~ à la place du
...@@ -234,7 +321,7 @@ de base. ...@@ -234,7 +321,7 @@ de base.
| ~C-x k~ | Choisit un /buffer/ à fermer | | ~C-x k~ | Choisit un /buffer/ à fermer |
| ~C-x k RET~ | Ferme le /buffer/ courant | | ~C-x k RET~ | Ferme le /buffer/ courant |
Lorsqu'on ferme un buffer, si les données n'ont pas été sauvegardées Lorsqu'on ferme un /buffer/, si les données n'ont pas été sauvegardées
Emacs invite l'utilisateur à le faire. Emacs invite l'utilisateur à le faire.
*** Fenêtres *** Fenêtres
...@@ -298,7 +385,7 @@ travailler dans son environnement usuel. Il suffit de pouvoir s'y ...@@ -298,7 +385,7 @@ travailler dans son environnement usuel. Il suffit de pouvoir s'y
connecter par ~ssh~. connecter par ~ssh~.
Pour ouvrir un fichier distant, il suffit d'utiliser le raccourci Pour ouvrir un fichier distant, il suffit d'utiliser le raccourci
~C-x C-f~, puis d'écrire dans le ~mini-buffer~ ~C-x C-f~, puis d'écrire dans le ~minibuffer~
#+BEGIN_SRC bash #+BEGIN_SRC bash
/sshx:username@hostname: /sshx:username@hostname:
#+END_SRC #+END_SRC
...@@ -306,25 +393,26 @@ Pour ouvrir un fichier distant, il suffit d'utiliser le raccourci ...@@ -306,25 +393,26 @@ Pour ouvrir un fichier distant, il suffit d'utiliser le raccourci
(c'est à dire un buffer permettant de manipuler les fichiers du (c'est à dire un buffer permettant de manipuler les fichiers du
répertoire ~HOME~ de l'utilisateur sur la machine distante. On peut répertoire ~HOME~ de l'utilisateur sur la machine distante. On peut
aussi utiliser ~TAB~ pour voir alors la liste des fichiers accessibles aussi utiliser ~TAB~ pour voir alors la liste des fichiers accessibles
dans le /mini-buffer/, la complétion fonctionnant comme en local. dans le /minibuffer/, la complétion fonctionnant comme en local.
Une fois un fichier ouvert, il est manipulé classiquement dans le Une fois un fichier ouvert, il est manipulé classiquement dans le
/buffer/ et seule la sauvegarde du fichier nécessite la connexion. /buffer/ et seule la sauvegarde du fichier nécessite la connexion.
** Recherche ** Recherche
#+NAME: tab:recherche
| Raccourci | Description | | Raccourci | Description |
|-----------+------------------------------------------------------| |-------------+------------------------------------------------------|
| ~C-s~ | Recherche une chaîne dans le /buffer/ vers le *bas* | | ~C-s~ | Recherche une chaîne dans le /buffer/ vers le *bas* |
| ~C-r~ | Recherche une chaîne dans le /buffer/ vers le *haut* | | ~C-r~ | Recherche une chaîne dans le /buffer/ vers le *haut* |
|-----------+------------------------------------------------------| | ~C-S-s C-w~ | Complète la chaîne à chercher avec le mot courant |
|-------------+------------------------------------------------------|
| ~C-M-s~ | Recherche une expression régulière vers le *bas* | | ~C-M-s~ | Recherche une expression régulière vers le *bas* |
| ~C-M-r~ | Recherche une expression régulière vers le *haut* | | ~C-M-r~ | Recherche une expression régulière vers le *haut* |
Une fois une occurrence trouvée, on peut poursuivre la recherche vers Une fois une occurrence trouvée, on peut poursuivre la recherche vers
le bas ou vers le haut, en faisant respectivement ~C-s~ ou le bas ou vers le haut, en faisant respectivement ~C-s~ ou
~C-r~. Puisqu'on utilise pas le mode standard de recherche d'Emacs, ~C-r~. Puisqu'on utilise pas le mode standard de recherche d'Emacs,
mais le mode ~swiper~, il est possible de naviguer dans le mais le mode ~swiper~, il est possible de naviguer dans le
/mini-buffer/ avec les flèches pour se déplacer d'une occurrence à /minibuffer/ avec les flèches pour se déplacer d'une occurrence à
l'autre. l'autre.
Quand la recherche est terminée, Quand la recherche est terminée,
...@@ -336,7 +424,7 @@ Quand la recherche est terminée, ...@@ -336,7 +424,7 @@ Quand la recherche est terminée,
Une autre particularité intéressante de ~swiper~ est son utilisation Une autre particularité intéressante de ~swiper~ est son utilisation
de ~SPC~ qui sert de joker pendant les saisies. Voir par exemple, la de ~SPC~ qui sert de joker pendant les saisies. Voir par exemple, la
figure [[fig:recherche-swiper]], où on a lancé une recherche puis tapé figure [[fig:recherche-swiper]], où on a lancé une recherche puis tapé
~y t x(~ dans le /mini-buffer/, les lignes correspondantes y sont ~y t x(~ dans le /minibuffer/, les lignes correspondantes y sont
affichées. On peut parcourir cette liste à l'aide des flèches du affichées. On peut parcourir cette liste à l'aide des flèches du
clavier, le /buffer/ de recherche suit l'occurrence sélectionnée. clavier, le /buffer/ de recherche suit l'occurrence sélectionnée.
...@@ -344,6 +432,11 @@ clavier, le /buffer/ de recherche suit l'occurrence sélectionnée. ...@@ -344,6 +432,11 @@ clavier, le /buffer/ de recherche suit l'occurrence sélectionnée.
#+NAME: fig:recherche-swiper #+NAME: fig:recherche-swiper
[[file:emacs-swiper-search.png]] [[file:emacs-swiper-search.png]]
Attention si on utilise ~C-S-s C-w~, on n'utilise pas ~swiper~ pour la
recherche, mais l'outil recherche incrémentale classique d'Emacs. Il
est possible d'ajouter des mots à la recherche en faisant à nouveau
~C-w~.
** Remplacement de texte ** Remplacement de texte
| Raccourci | Description | | Raccourci | Description |
|-----------+------------------------------------------------------| |-----------+------------------------------------------------------|
...@@ -360,7 +453,7 @@ remplacer, Emacs attend une validation. ...@@ -360,7 +453,7 @@ remplacer, Emacs attend une validation.
Noter que le mode de remplacement est /intelligent/ au sens où il Noter que le mode de remplacement est /intelligent/ au sens où il
respecte la case si possible. respecte la case si possible.
Si on demande le remplacement de ~foo~ par ~bar~= on obtient les résultats suivants Si on demande le remplacement de ~foo~ par ~bar~ on obtient les résultats suivants
| Chaîne initiale | Résultat | | Chaîne initiale | Résultat |
|-----------------+----------------| |-----------------+----------------|
| ~foobar~ | ~barbar~ | | ~foobar~ | ~barbar~ |
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment