# 7 Cercles

# Les Sept Cercles des Éditeurs de texte

Voici une classification par niveau des degrés de connaissance de son éditeur. Nous développons les deux premiers niveaux, en indiquant juste le nom de la commande pour les niveaux suivants : nous estimons en effet qu'à partir du niveau 3 vous êtes capables de trouver par vous-mêmes la façon de faire les choses, et de chercher tout seuls dans les documentations...

Trois éditeurs sont ici abordés : emacs, nano et vim. L'ordre de préséance entre éditeurs répond à un critère alphabétique neutre. Nous nous sommes aussi efforcés de ne mettre en avant que des fonctionnalités communes à au moins deux éditeurs : les avantages spécifiques de chaque éditeur n'ont donc pas leur place ici.

Enfin, quand nous disons «emacs», cela concerne bien entendu aussi «xemacs».

Pour noter les raccourcis claviers, on utilise des notations différentes suivant les éditeurs, pour suivre la façon dont les touches sont indiquées dans l'aide. On a donc:

- emacs : `C-x` pour control-x, c'est à dire la touche x avec le modificateur control en même temps. De même `M-x` représente la touche x avec le modificateur méta.
- nano : `^X` pour control-x.
- vim : `CTRL-X` pour control-x.

## 1) «Il y a»

### Lancer son éditeur

Pour lancer son éditeur favori, la procédure est partout la même. Il faut taper dans un terminal* le nom de l'éditeur suivi du nom du fichier à éditer; par exemple :

    prao ~ $ emacs rapport.tex
    prao ~ $ nano index.html
    prao ~ $ vim monbofichier

Pour `emacs`, si vous êtes dans un xterm*, vous pouvez taper :

    prao ~ $ emacs -nw rapport.tex

pour lancer emacs dans le terminal où vous vous trouvez (sans ouvrir de nouvelle fenêtre graphique), ce qui est plus rapide mais vous n'avez pas la souris.

### Sauvegarder son texte

- emacs : taper `C-x C-s` (save). Vous pouvez aussi cliquer sur le bouton `Save`, ou sélectionner `Save fichier` dans le menu `File`. Pour sauver votre fichier sous un nom différent, tapez `C-x C-w` ou sélectionner `Save as...` dans le menu `File`. Emacs vous demande alors un nom de fichier.
- nano : taper `^O`. Nano vous demande alors sous quel nom enregistrer le fichier. Appuyez sur la touche Entrée si vous voulez garder le même nom.
- vim : taper `:w` (write). Pour enregistrer sous un autre nom, faire `:sav nouveaunom`.

### Quitter son éditeur

# &icone.attention; Attention &icone.attention;

Quelque soit l'application, vous devez la quitter correctement, avec sa commande. Vous ne devez jamais fermer une fenêtre en sélectionnant «Fermer» dans le cadre de la fenêtre; dans le cas d'un éditeur mal configuré vous risquez de perdre votre travail. Des copies de sauvegarde existent et permettent d'en récupérer la majeure partie, mais ce n'est pas un pli à prendre... Quittez donc correctement votre éditeur.

- emacs : taper `C-x C-c` ou cliquer sur `Exit Emacs` dans le menu `File`. Emacs vous demande si vous voulez sauvegarder votre texte.
- nano : taper `^X`. Cette commande quitte nano en vous demandant si vous voulez enregistrer en quittant.
- vim : taper `:wq` (write quit) pour quitter en sauvant. Si vous essayez de quitter vim sans avoir sauvé votre texte (avec `:q`), il refuse; il faut taper `:q!` pour forcer la sortie sans sauver le document.

### Écrire et effacer du texte

- emacs : taper directement... Vous pouvez positionner le curseur à l'aide de la souris. Pour effacer, utilisez la touche Backspace.
- nano : vous pouvez aussi taper directement. La souris par contre ne vous sert à rien.
- vim : il y a deux modes dans vim, un mode insertion (dans lequel on écrit du texte) et un mode commande (où les touches correspondent à une fonction). Par défaut, quand vous lancez vim, vous êtes en mode commande.
  - Passer en mode insertion à l'endroit où se trouve le curseur : appuyez sur la touche «i» («insérer»). Le mot «INSERT» apparaît en bas de l'écran et vous signale que vous êtes en mode insertion.
  - Passer en mode commande : appuyez sur la touche «Escape». Le mot «INSERT» disparaît.

  Ce sont ces deux touches qui servent à alterner entre les deux modes. Vous découvrirez plus tard les autres touches qui servent à insérer au début ou à la fin de la ligne, avant ou après la ligne courante, etc.

  Pour effacer du texte en mode insertion, utilisez la touche Backspace. La souris ne sert à placer le curseur qu'avec gvim. L'effacement de texte en mode commande, beaucoup plus précis, relève du Deuxième Cercle...

### Se déplacer simplement

- emacs : deux solutions
  - Utilisez les flèches et la barre de défilement.
  - Il y a des commandes spécifiques pour se de-placer, qui sont les même que dans un shell, et qui aident a retenir les touches de déplacement complexe: `C-f` pour avancer (forward), `C-b` pour reculer (backward), `C-n` pour descendre (next) et `C-p` pour monter (previous).
- nano : utilisez les flèches.
- vim :
  - En mode insertion : utilisez les flèches. Avec gvim vous disposez d'une barre de défilement.
  - En mode commande : vous disposez de ces moyens, ainsi que des mythiques touches h, j, k et l, fondamentales pour se déplacer dans un grand nombre de jeux : h pour aller à gauche, l à droite, j vers le bas, et k vers le haut.

### Trouver l'aide

- emacs : que dire... Cliquez sur le menu `Help` et choisissez ce qui vous plaît... Je vous conseille de commencer par le tutorial et la FAQ*. Vous pouvez aussi utiliser les commandes en `C-h` suivi d'une lettre pour avoir de l'aide sur différent aspects d'emacs. Par exemple, `C-h t` lance le tutorial, et `C-h C-h` vous donne l'aide sur l'aide.
- nano : les commandes que vous pouvez faire sont indiquées dans les deux lignes en bas du terminal. Une aide succinte est néanmoins disponible en tapant `^G` ou `F1`.
- vim : en mode commande, taper `:h` (help). La fenêtre se divise en deux, et un fichier d'aide apparaît. Son fonctionnement est décrit dans les premières lignes.

  Des thèmes sont indiqués entre barres verticales (par exemple, `|quickref|`. Pour y accéder, placez le curseur sur le mot-clé entre barres et tapez CRTL-] (Controle-crochet fermant). Pour revenir au début de l'aide, taper CRTL-T (top). Je vous conseille de commencer par `|howto.txt|`, qui classe par thèmes les commandes. Pour refermer l'écran d'aide, taper `:q` (quit).

## 2) «Je marche seul»

### Défaire et refaire une action («undo» et «redo»)

- emacs : utiliser le bouton `Undo`, ou sélectionner `Undo` dans le menu `Edit`. Vous pouvez aussi utiliser le raccourci clavier `C-x u` (qui n'est pas `C-x C-u`...) ou `C-_` ou `C-/`.

  Il n'y a pas de commande spécifique pour refaire. Un moyen de s'en sortir est de taper un caractère et de faire des Undo : il défera alors les Undo précédents, i.e. refera ce qui a été défait.

- nano : cela n'est pas possible ! Cependant si vous avez effacé des lignes en faisant `^K`, vous pouvez les insérer en faisant `^U`.
- vim : (en mode commande). `u` (undo) défait la dernière commande. `CTRL-R` (redo) refait la dernière commande. On peut ainsi faire et refaire l'ensemble des actions faites depuis que le fichier a commencé à être édité.

### Se déplacer plus finement : par lignes, par paragraphes, par demi-pages et par pages, etc

- emacs :
  - Les commandes de déplacement `C-f`, `C-b`, `C-n` et `C-p` agissent différemment si on change de modificateur:
    - `M-f` et `M-b` se déplacent par mot.
    - `M-n` et `M-p` se déplacent par paragraphes.
  - Il y a aussi quelques commandes supplémentaires :
    - `Home` ou `C-a` placent le curseur en début de ligne.
    - `End` ou `C-e` place le curseur en fin de ligne.
    - `M-a` placent le curseur en début de phrase.
    - `M-e` place le curseur en fin de phrase.
    - `C-v` / `M-v` fait respectivement avancer/reculer le texte d'un écran.
    - `M-<` / `M->` placent respectivement tout au début/tout à la fin du fichier.
- nano : Utiliser les touches de déplacement usuelles....
- vim : on peut utiliser les touches de déplacement, mais on peut aussi tout faire en mode commande. Ces commandes de déplacement sont aussi celles de `less`.
  - `$` place le curseur en fin de ligne.
  - `^` et `0` (zéro) placent le curseur en début de ligne (vous saurez plus tard la différence entre les deux commandes...).
  - `w` (word) / `b` (back) avance/recule d'un mot, curseur au début du mot.
  - `e` (end) avance d'un mot, curseur en fin de mot.
  - `{` et `}` (accolades) : respectivement, recule et avance d'un paragraphe.
  - `(` et `)` (parenthèses) : respectivement, recule et avance d'une phrase.
  - `CTRL-D` (down) / `CTRL-U` (up) fait respectivement avancer/reculer le texte d'un demi-écran.
  - `CTRL-F` (forward) / `CTRL-B` (back fait avancer/reculer le texte d'un écran.
  - `CTRL-E`/`CTRL-Y` fait avancer/reculer le texte d'une ligne.
  - `gg` ou `[[` placent tout au début du fichier.
  - `G` ou `]]` placent tout à la fin du fichier.
  Ces commandes sont associables avec un quantificateur : `15w` fait avancer le curseur de 15 mots.

### Aller à un numéro de ligne précis

- emacs : Taper `M-g` (méta) et indiquer le numéro de ligne.
- nano : Taper `^_` (line) et indiquer le numéro de la ligne.
- vim : on associe la commande `G` à un numéro de ligne. Par exemple, `38G` place sur la ligne 38.

### Faire une destruction sélective (un caractère, une ligne, une phrase, un paragraphe, etc)

- emacs :
  - La touche BACKSPACE efface le caractère à gauche du curseur.
  - La touche DELETE efface le caractère placé sous le curseur.
  - `C-k` efface la fin de la ligne courante.
  - Pour effacer un fragment de texte, le sélectionner à la souris et cliquer sur le bouton `Cut`, ou sélectionner `Cut` dans le menu `Edit`.
  - On peut également effacer un fragment quelconque au clavier en tapant Ctrl-espace à une extrémité de la zone à sélectionner, et `C-w` à l'autre extrémité.
- nano :
  - La touche BACKSPACE (ou `^H`) efface le caractère à gauche du curseur.
  - Les touches DELETE (ou `^D`) efface le caractère placé sous le curseur.
  - `^K` efface la fin de la ligne courante.
- vim : (en mode commande) :
  - `x` détruit le caractère sous le curseur.
  - `X` détruit le caractère à gauche le curseur.
  - `dd` détruit la ligne courante.
  - `D` détruit la fin de la ligne courante.
  - On peut aussi associer `d` à une commande de déplacement : par exemple, `dG` pour détruire toute la fin du fichier, `d}` pour détruire la fin du paragraphe, `d3w` pour détruire trois mots.
  - Passer en mode visuel avec la commande `v` et utiliser les touches de déplacement pour sélectionner un fragment de texte : le texte sélectionné est mis en valeur. Taper `d` pour détruire le texte sélectionné.

### Chercher un mot

- emacs : vous pouvez faire appel au menu `Edit` et cliquer sur `Search` ou `Search Backwards`, et taper le mot recherché. Il est quand même plus simple de taper `C-s` (search) ou `C-r` (rear) pour chercher en arrière; indiquez le mot et tapez à nouveau `C-s` (`C-r`) pour aller à la prochaine occurrence du mot. Une fois arrivé en bas (ou en haut), emacs bippe et revient à l'autre bout du texte.
  La casse des caractères n'a pas d'importance quand on indique une minuscule. Par contre, si on demande une majuscule, il ne cherchera que les majuscules.
- nano : taper `^W`; indiquez le mot recherché.
- vim : en mode commande, appuyer sur le slash (`/`) et indiquer le mot recherché (comme avec `less`). La casse des caractères peut avoir de l'importance suivant votre configuration (tapez donc les mots clefs en minuscules), et vim sait revenir au début du texte quand il a atteint la fin du fichier. Pour aller à la prochaine occurrence du mot, taper `n` (next). Pour aller à la précédente occurrence du mot, taper `N`.
  Pour chercher un mot en arrière dans le texte, taper `?` puis le mot. On se sert de `n` et de `N` de la même façon.

### Faire une recherche et remplacement simple

- emacs : taper `M-%` et compléter, en validant chaque terme par un retour à la ligne. Vous pouvez aussi utiliser le bouton `Replace` ou sélectionner `Replace` dans le menu `Edit`.
  Emacs vous demande confirmation pour chaque remplacement : répondre `y` pour accepter, `n` pour refuser, `!` pour tout remplacer d'un coup et `q` pour arrêter les remplacements.
- nano : taper `^\`. Entrez la chaîne à chercher puis la chaîne de remplacement. Nano demande confirmation pour chaque remplacement : taper `y` pour accepter le remplacement, `n` pour le refuser, `a` pour remplacer toutes les occurrences restantes.
- vim : on utilise la commande `:%s/mot1/mot2/g`. Le pour-cent signifie que le remplacement se fera dans tout le fichier, `s/mot1/mot2/` signifie qu'il faut remplacer (`substitute`) le mot1 par le mot2. La dernière lettre, `g`, signifie que l'on veut remplacer toutes les occurrences présentes sur chaque ligne. En effet, sans le «g», seule la première occurrence serait traitée.
  Si on veut que vim demande confirmation, on peut ajouter un «c» à la fin : `:%s/mot1/mot2/gc`. Vim vous propose alors plusieurs réponses possibles : `y` pour accepter le remplacement, `n` pour le refuser, `a` (all) pour tout remplacer d'un coup, `q` pour quitter. Vous retrouvez aussi les commandes `CTRL-Y` et `CTRL-E`, pour faire reculer ou avancer le texte d'une ligne.

### Faire du copier-coller

- emacs :
  - Avec la souris : sélectionner un fragment de texte avec le bouton gauche souris et cliquer sur le bouton `Copy`. Cliquer avec le bouton du milieu de la souris à l'endroit où on veut coller le texte. Vous aurez reconnu ici la méthode standard pour copier/coller du texte d'une fenêtre à l'autre.
  - Au clavier : un texte qui a été effacé avec `C-w` ou `C-k` peut être collé ailleurs en tapant `C-y` (yank). Si on veut copier un bout de texte sans l'effacer, il suffit de l'effacer et de le recopier juste après là où il était (ce qui n'empêche pas de le recopier ailleurs en autant d'exemplaires qu'on veut). On peut récupérer un texte copier il y a longtemps avec `C-y` suivis d'un ou plusieurs `M-y`. On peut aussi copier la région sélectionnée sans la couper avec `M-w`
- nano : cela n'est pas possible. Mais vous pouvez utiliser la technique du copy-paste avec la souris.
- vim : Passer en mode visuel avec la commande `v` et utiliser les touches de déplacement pour sélectionner un fragment de texte. Appuyer sur `y` (yank) pour copier le texte en mémoire. Placer le curseur à l'endroit où on veut coller le texte, et appuyer sur `p` (put) si vous voulez coller après le curseur ou sur `P` si vous voulez coller avant le curseur. `yy` fait une copie de la ligne courante. On peut aussi utiliser `y commande-de-déplacement` pour copier un fragment de texte, sans passer par une sélection visuelle.

  # &icone.attention; Attention &icone.attention;

  Quand vous collez un bout de texte recopié à la souris dans un autre terminal, faites attention à être en mode insertion, sinon les choses se passeront mal. En effet, vim interpréterait le texte que vous collez comme des commandes jusqu'à ce qu'il rencontre des lettres comme «i» ou «a» qui font passer en mode insertion.

### Reformater un paragraphe

- emacs : `M-q`.
- nano : `^J`.
- vim : `Q`.

## 3) «Des nôtres»

### Savoir remplacer du texte : remplacement d'une lettre par une autre, d'un fragment de texte par un autre, écrasement du texte

- emacs : `Inser` pour balancer entre les modes insertion et écrasement.
- vim : `r` et `R` (replace). `s` et `S` (substitute).

### Faire passer une majuscule en minuscule et inversement

- emacs : `M-l` et `M-u`.
- vim : `~` (tilde).

### Répéter la dernière action

- emacs :`C-x ESC ESC`.
- vim : `.` (point).

### Savoir recoller deux lignes

- emacs, nano : pas de commande spécifique; on recolle les deux lignes en effaçant le caractère de fin de ligne, donc backspace en début de ligne, ou Delete en fin de ligne.
- vim : `J` (join).

### Repérer les parenthèses, crochets, accolades qui se correspondent

- emacs : colorisation syntaxique et `C-M-f` / `C-M-b`.
- vim : colorisation syntaxique et `%` (pour-cent).

## 4) «Il suffira d'un signe»

### Associer une fonction simple à une touche précise («mapper» une touche)

- emacs : `M-x local-set-key` ou `M-x global-set-key`.
- vim : `:map touche fonction`.

### Insérer un fichier extérieur

- emacs : `C-x i` ou `Insert file` dans le menu `File`.
- nano : `^R fichier`.
- vim : `:r fichier`.

### Écrire une partie du texte vers un fichier extérieur

- emacs : `M-x write-region`
- vim : sélectionner un bloc et sauver le texte sélectionné (`:w nouveau-fichier`).

### Utiliser les expressions régulières fondamentales pour une recherche : «matcher» un début/une fin de ligne, un chiffre quelconque, une lettre quelconque, majuscules et minuscules, une ponctuation, et les conjonctions (et, ou, sauf...).

## 5) «Il changeait la vie»

### Savoir utiliser les expressions régulières pour des remplacements.

### Être initié aux deux premiers Cercles d'un autre éditeur.

### Associer une fonction complexe ou une série de commandes à une touche donnée.

### Partager sa fenêtre en plusieurs fenêtres pour éditer plusieurs fichiers à la fois.

- emacs : `C-x 2` ou `Split Window` dans le menu `File`. Options du menu `File`. `C-x o` pour changer de fenêtre.
- vim : `-CTRL-W N` (window new). `CTRL-W k` et `CTRL-W j` pour monter/descendre d'une fenêtre interne.

### Savoir faire appel à une commande shell

- emacs : `M-!`
- vim : `:!commande`

### Connaître et savoir modifier le fichier de configuration de son éditeur.

## 6) «Veiller tard»

### Savoir gérer plusieurs «tampons» (buffers temporaires).

### Savoir placer des marques dans le texte pour s'y reporter.

### Savoir se servir de la colorisation syntaxique et forcer un type de colorisation quand ce n'est pas automatique.

### Savoir faire appel à une commande shell et en insérer le résultat dans le fichier de travail

- emacs : `C-u M-!`
- nano : copier-coller le résultat produit par l'appel d'une commande shell dans un autre terminal.
- vim : `:r!commande`

### Savoir soutenir un assaut de mauvaise foi face à un défenseur de l'alignement opposé.

## 7) «Au bout de mes rêves»

### Savoir récupérer, patcher, installer, compiler, configurer, paramétrer son éditeur.

### Savoir réécrire son fichier de configuration sans avoir de modèle sous les yeux.

### Savoir créer une nouvelle colorisation syntaxique.

## Des références sur les éditeurs :

1. Emacs :
   - GNU Emacs : le site officiel.
   - Xemacs : le site officiel.
   - Emacs sur Linux-France : liens vers la FAQ, tutorial, et d'autres choses.
2. vim :
   - vim : le site officiel.
   - Guide de survie sous VI ou VI par l'exemple : Article d'introduction à VI, en français, paru dans l'écho de Linux. Vraiment très bien...
   - Aide-mémoire pour l'utilisation de vi. Envisage, ce qui est rare, les options courantes du .vimrc.

Auteur : Dominique Quatravaux (1998), Émilia Robin (1998, 2000), Joël Riou (2002), Gaëtan LEURENT (2004). Dernière modification le .