Mettre Debian 8.3
stty werase '^H'
ou sur Arch Linux 2/2016
stty werase '^?'
dans .bashrc
(par exemple) fait Ctrl – Backspace supprimer le dernier mot dans le terminal. Il ne s'agit pas du même comportement que dans les applications charts modernes (par exemple Firefox): il supprime le dernier mot séparé par un espace et non le dernier mot séparé par des espaces ou des caractères comme . : , ; " ' & / ( )
. : , ; " ' & / ( )
. : , ; " ' & / ( )
.
Est-il possible de faire en sorte que Ctrl – Backspace se comporte dans le terminal comme dans les applications charts modernes? Aussi, est-il possible de faire Ctrl – Supprimer supprimer le mot immédiatement avant le slider?
Il y a ici deux éditeurs de ligne: l'éditeur de ligne de base fourni par le kernel (éditeur de ligne canonique tty) et l'éditeur de ligne de bash (implémenté via la bibliothèque readline). Les deux ont une command d'effacement à mot précédent qui est liée à Ctrl + W par défaut. La key peut être configurée pour l'éditeur de ligne tty en mode canonique via stty werase
; bash imite la binding de key qu'il trouve dans le paramètre tty à less qu'il ne soit surchargé dans sa propre configuration.
L'action werase
dans l'éditeur de ligne tty ne peut pas être configurée. Il efface toujours les mots (ASCII) délimités par des espaces blancs. Il est rare d'interagir avec l'éditeur de ligne de tty – c'est ce que vous obtenez par exemple lorsque vous tapez cat
sans argument. Si vous voulez des raccourcis keyboard fantaisie là, vous pouvez exécuter la command sous un outil comme rlwrap qui utilise readline.
Bash fournit deux commands pour supprimer le mot précédent : unix-word-rubout
( Ctrl + w ou comme défini par stty werase
) et backward-kill-word
( M-DEL
, c'est M-DEL
dire Esc Backspace ) qui traite un mot comme une séquence de caractères alphanumériques dans les parameters régionaux actuels et _
. Si vous voulez que Ctrl + Backspace efface la séquence précédente de caractères alphanumériques, ne définissez pas stty werase
et placez plutôt la ligne suivante dans votre .inputrc
:
"\Ch": backward-kill-word
Notez que cela suppose que votre terminal envoie le caractère Ctrl + H pour Ctrl + Backspace . Malheureusement, c'est l'une de ces keys sans binding standard (et Backspace en particulier est un désordre pour des raisons historiques).
Il y a aussi une command symésortingque kill-word
qui est liée à Md
( Alt + D ) par défaut. Pour le lier à Ctrl + Suppr , vous devez d'abord déterminer quelle séquence d'échappement votre terminal envoie, puis ajoutez une ligne correspondante dans votre .inputrc
. Tapez Ctrl + V puis Ctrl + Suppr ; ceci va insert quelque chose comme ^[[3;5~
où l'initiale ^[
est une représentation visuelle du caractère d'échappement. Ensuite, la binding est
"\e[3;5~": kill-word
Si vous n'êtes pas satisfait de la définition d'un mot, vous pouvez fournir le vôtre dans bash: voir le comportement déroutant des raccourcis keyboard emacs dans bash
Le comportement du caractère WERASE dans le traitement du terminal en mode cuit est codé en dur , au less sous Linux:
if (kill_type == WERASE) { /* Equivalent to BSD's ALTWERASE. */ if (isalnum(c) || c == '_') seen_alnums++; else if (seen_alnums) break; }
Les mots sont donc des lettres, des numbers et des traits de soulignement. C'est ainsi qu'il sera à tout moment dans un terminal sous Linux lorsqu'une application qui exécute son propre traitement en mode cuit n'est pas en cours d'exécution.
La version de readline (utilisée par bash et autres) semble être un peu différente de la version du kernel, mais elle semble aussi être codée en dur :
Les mots sont composés de lettres et de numbers.
Mais cela ne semble pas correspondre à ce que bash
fait pour moi: foo+bar^W
efface tout, pas seulement bar
. Il y a plus d'informations à ce sujet ici .