11.7. Supprimer et Couper

La plupart des commandes qui effacent du texte le sauvegardent dans le presse-papiers pour que vous puissiez le déplacer ou le copier à d'autres endroits du tampon. Ces commandes sont connues comme des commandes de coupe. Les autres commandes effaçant du texte n'enregistrent pas ce texte dans le presse-papiers ; on les appelle des commandes de suppression. (Cette distinction est faite seulement pour l'effacement de texte dans le tampon.) Si vous faites une commande de coupe ou de suppression par erreur, vous pouvez utiliser la commande C-x u (undo) pour l'annuler. (Section 7.4).

Vous ne pouvez pas couper du texte en lecture seule, car ce type de texte ne permet aucune sorte de modification. Mais certains utilisateurs préfèrent utiliser les commandes de coupe pour copier du texte en lecture seule dans le presse-papier, sans pour autant le modifier. Si vous définissez la variable kill-read-only-ok à une valeur non nil, les commandes de coupe fonctionneront différemment dans un tampon en lecture seule : elles vous déplacent à travers le texte, et le copient dans le presse-papier, sans pour autant le supprimer du tampon. Lorsque ceci arrive, un message dans la zone d'écho vous en tient informé.

Les commandes de suppression incluent C-d (delete-char) et DEL (delete-backward-char), qui suppriment seulement un caractère à la fois, et les commandes qui effacent seulement des espaces ou des caractères newline. Les commandes qui peuvent détruire une quantité significative de données non triviales sont généralement des commandes de coupe. Les commandes de coupe et de suppression se reconnaissent par les mots kill (pour copier) et delete (pour supprimer) dans leur nom et leur description.

Un grand nombre de systèmes de fenêtrage suivent la convention que l'insertion supprime le texte déjà sélectionné s'il y en a. Vous pouvez demander à Emacs de fonctionner de cette manière en activant le mode Supprime Sélection, avec M-x delete-selection-mode, ou en utilisant la personnalisation. Un autre effet de ce mode est que DEL, C-d et quelques autres touches, lorsqu'une sélection existe, vont effacer la sélection en entier. Il active aussi le mode de Marque Transitoire. (Section 11.2).

11.7.1. Suppression

C-d, Delete

Supprime le caractère suivant (delete-char). Si votre clavier a une touche de fonction Delete (placée habituellement sur le pavé d'édition), Emacs la lie aussi à delete-char.

DEL, BS

Supprime le caractère précédent (delete-backward-char). Certains claviers appelent cette touche "touche backspace" et l'étiquettent avec une flèche vers la gauche : <-.

M-\

Supprime les espaces et tabulations autour du point (delete-horizontal-space).

M-SPC

Supprime les espaces et tabulations autour du point, laissant une espace (just-one-space).

C-x C-o

Supprime les lignes vierges autour de la ligne courante (delete-blank-lines).

M-^

Joint deux lignes en supprimant le caractère fin-de-ligne intermédiaire, ainsi que les caractères d'indentation qui le suivent (delete-indentation).

Les commandes de suppression les plus courantes sont C-d (delete-char) et DEL (delete-backward-char). C-d supprime le caractère après le point, celui sur lequel se trouve le curseur. Elles ne déplacent pas le point. DEL supprime le caractère avant le curseur, et recule le point. Vous pouvez effacer des fins-de-lignes comme tout autre caractère du tampon ; supprimer une fin-de-ligne joint deux lignes. C-d et DEL ne sont pas toujours des commandes de suppression ; lorsqu'on leur donne un argument, elles deviennent des commandes de coupe, car elles peuvent effacer plus d'un caractère.

Tous les claviers ont une touche large, étiquetée DEL, BACKSPACE, BS ou DELETE, qui est un peu au dessus de la touche RET ou ENTER est qui est normalement utilisée pour effacer ce que vous venez de taper. Indépendamment du nom affiché sur la touche, elle est pour Emacs équivalente à DEL -- ou devrait l'être.

Un grand nombre de claviers ont une touche BACKSPACE un peu au dessus de RET ou ENTER, et une touche DELETE ailleurs. Dans ce cas, la touche BACKSPACE est DEL, et la touche DELETE est équivalente à C-d -- ou devrait l'être.

Pourquoi précisons-nous "ou devrait l'être " ? Lorsqu'Emacs démarre en utilisant un système de fenêtrage, il détermine automatiquement quelle(s) touche(s) doit être équivalente à DEL. Ainsi les touches BACKSPACE et/ou DELETE font normalement ce qu'il faut. Dans certains cas inhabituels, Emacs obtient de mauvaises informations de la part du système. Si ces touches ne font pas ce qu'elles devraient, vous devez dire à Emacs quelle touche utiliser pour DEL. Section 32.9.1.

Sur des terminaux texte seulement, Emacs ne peut pas dire où se trouve quelle touche, et suit donc un plan uniforme qui peut ou non convenir à votre clavier. Le plan uniforme est que le caractère ASCII DEL supprime, et que le caractère ASCII BS (backspace) demande de l'aide (identique à C-h). Si ce n'est pas le cas pour votre clavier, et que vous pensez que la touche qui devrait supprimer en arrière demande plutôt de l'aide, voyez Section 32.9.1.

Les autres commandes de suppression sont celles qui suppriment seulement des caractères vierges : espaces, tabulations et fins-de-ligne. M-\ (delete-horizontal-space) supprime toutes les espaces et tabulations avant et après le point. M-SPC (just-one-space) fait de même mais laisse un espace après le point, sans tenir compte du nombre d'espaces qui existaient précédemment (même zéro).

C-x C-o (delete-blank-lines) supprime toutes les lignes vierges suivant la ligne courante. Si la ligne courante est vierge, elle supprime toutes les lignes vierges précédentes également (en laissant une ligne vierge, la ligne courante).

M-^ (delete-indentation) joint la ligne courante et la ligne précédente, en supprimant un fin-de-ligne et les espaces l'entourant, laissant habituellement un simple espace. M-^.

11.7.2. Couper par Lignes

C-k

Coupe le reste de la ligne ou une ou plusieurs lignes (kill-line).

La commande de coupe la plus simple est C-k. En début de ligne, elle coupe tout le texte de la ligne, laissant celle-ci vierge. Sur une ligne vierge, elle coupe la ligne entière, caractère fin-de-ligne compris. Pour couper une ligne non vierge en entier, allez au début de cette ligne et tapez C-k deux fois.

Plus généralement, C-k coupe depuis le point jusqu'à la fin de la ligne, à moins que le point ne soit en fin de ligne. Dans ce cas elle coupe la fin-de-ligne suivant le point, raccrochant ainsi la ligne suivante à la ligne courante. Les espaces et tabulations que vous ne pouvez pas voir en fin de ligne sont ignorées pour déterminer ce comportement, donc si le point semble être à la fin de la ligne, vous pouvez être sûr que C-k coupera la fin-de-ligne.

Lorsqu'on passe à C-k un argument positif, elle coupe autant de lignes et de fins-de-lignes (cependant, le texte de la ligne courante précédant le point est conservé). Avec un argument négatif −n, elle coupe n lignes précédant la ligne courante (ainsi que le texte de la ligne courante précédant le point). Ainsi, C-u - 2 C-k en début de ligne coupe les deux lignes précédentes.

C-k avec un argument égal à zéro coupe le texte de la ligne courante avant le point.

Si la variable kill-whole-line est non-nil, C-k en tout début d'une ligne coupe la ligne entière avec la fin-de-ligne. Cette varaible est nil par défaut.

11.7.3. Autres Commandes de Coupe

C-w

Coupe la région (depuis le point jusqu'à la marque) (kill-region).

M-d

Coupe un mot (kill-word). Section 23.1.

M-DEL

Coupe le mot précédent (backward-kill-word).

C-x DEL

Coupe depuis le début de la phrase (backward-kill-sentence). Section 23.2.

M-k

Coupe jusqu'à la fin de la phrase (kill-sentence).

C-M-k

Coupe une sexp (kill-sexp). Section 24.2.

M-z caractère

Coupe jusqu'à la prochaine occurence de caractère (zap-to-char).

C-w (kill-region) est une commande de coupe très générale, qui coupe tout entre le point et la marque. Avec cette commande, vous pouvez couper une suite quelconque de caractères consécutifs, si vous placez d'abord la région autour de ces caractères.

Une manière pratique de couper est combinée avec la recherche : M-z (zap-to-char) lit un caractère et coupe depuis le point et jusqu'à la prochaine occurrence (incluse) de ce caractère dans le tampon. Un argument numérique joue le rôle de compteur de répétition. Un argument négatif indique de rechercher en arrière et de couper le texte avant le point.

D'autres unités syntaxiques peuvent être coupées : des mots, avec M-DEL et M-d (Section 23.1) ; des sexps, avec C-M-k (Section 24.2) ; et des phrases, avec C-x DEL et M-k (Section 23.2).

Vous pouvez utiliser des commandes de coupe dans des tampons en lecture seule. Elles ne modifient pas le tampon, et sonnent pour vous en avertir, mais copient le texte que vous avez essayé de couper dans le presse-papiers, pour que vous puissiez le coller dans d'autres tampons. La plupart des commandes de coupe déplacent le point à travers le texte qu'elles ont coupé de cette façon, pour que les commandes de coupe successives construisent une unique entrée dans le presse-papiers, comme d'habitude.