Équivalent clé shell Windows (supprimer toute la ligne) dans Bash

13

Dans la ligne de commande Windows (powershell et cmd), lorsque vous appuyez sur la Esctouche sur une ligne, tout ce que vous avez tapé à l'invite est supprimé.

J'ai trouvé qu'en appuyant sur la Esctouche à l'invite bash ne fait rien. Appuyez sur Escpuis backspacesupprimez un mot, mais cela doit être fait pour chaque mot.

J'apprends Bash de manière incrémentielle et saisis parfois quelque chose de stupide au milieu de la ligne et je pense qu'il vaut mieux taper à partir de zéro. Pour ce faire, appuyer sur backspaceest le seul moyen que j'ai trouvé jusqu'à présent.

Que faire?

Je connais la clearcommande et le Ctrl-Lraccourci, mais je ne parle pas d'effacer tout le terminal. Juste la ligne.

Animesh
la source
1
Il y a quelque temps, j'ai publié une liste de raccourcis clavier de ligne de lecture utiles sur le superutilisateur. Vous pouvez également les trouver utiles. (Readline est la bibliothèque que bash utilise pour l'édition de lignes.)
jw013
hey jw013, merci pour une belle retouche. :-)
Animesh

Réponses:

15

Vous voulez kill-whole-line, mais ce n'est pas lié par défaut dans bash. backward-kill-line( CtrlX Backspace) et unix-line-discard( CtrlU) effacent tous les deux du point actuel au début de la ligne, il suffit donc d'aller à la fin de la ligne et d'utiliser l'un ou l'autre.

Ignacio Vazquez-Abrams
la source
Vous avez raison, ce n'est lié à rien. Je viens de découvrir que l'utilisation bind -P. Je suppose Ctrl-Uque Ctrl-Yc'est la seule option.
Animesh
Vous constaterez qu'un certain nombre de liaisons par défaut sont dérivées des séquences de touches dans l'éditeur Emacs et que ces liaisons apparaissent également ailleurs.
Blrfl
@Blrfl pour étendre votre commentaire, la plupart de ces raccourcis clavier ont été résumés dans la bibliothèque readline , qu'un grand nombre de programmes de ligne de commande utilisent et c'est pourquoi ils ont tous des touches d'édition de ligne similaires.
jw013
6

Ctrl+ava au début de la ligne et Ctrl+ksupprime à la fin de la ligne

lemen
la source
Essayez d' ^Uabord, dans la plupart des implémentations du mode d'édition de ligne de commande Emacs, il supprime déjà la ligne complète. Dans ceux où il ne supprime que la gauche du curseur (GNU readline, par exemple), appuyez ^Kensuite sur.
mirabilos
3

Pour développer un peu la réponse d'Ignacio Vazquez-Abrams, vous pouvez obtenir (presque) un comportement semblable à Windows à partir de la Escclé dans bash en liant le kill-whole-lineà Escavec la commande suivante

bind '"\e":kill-whole-line'

Si vous ajoutez la ligne à votre ~/.inputrcfichier, la liaison persistera entre les sessions.

Notez, cependant, que ce n'est pas très standard, car bash utilise en fait la Escclé comme une autre clé de modification (comme un Alt ou Ctrl non persistant). Si vous regardez la liste des raccourcis clavier existants (avec bind -P), vous verrez probablement plusieurs commandes liées à des combinaisons de touches commençant par "\ e" (par exemple

"\eb": backward-word

qui configure la combinaison Esc+ Bpour ramener le curseur au début du mot le plus récent - plutôt comme Ctrl+ , sauf que vous devez continuer à relâcher Esc(ainsi que B, bien sûr) si vous voulez le faire plus d'une fois de suite ).

Et cela explique pourquoi j'ai dit que le comportement que vous obtenez est presque semblable à celui de Windows: lorsque vous appuyez sur Esc, bash vérifie si vous l'utilisez en combinaison avec une autre touche; Donc, si vous le liez à kill-whole-line, il y a un peu de retard entre appuyer (ou plutôt relâcher) Escet effacer la ligne pour vous.

Cependant, si vous ne vous souciez pas de tout cela et que vous préférez vivre avec le retard plutôt que de vous recycler à une frappe différente, cela peut être fait.

(Remarque: une grande partie des informations que j'ai obtenues ici suite à la lecture - et en suivant les liens - de cette réponse .)

Wilson F
la source
1
Cela a été très utile, merci, et fonctionne plus ou moins comme annoncé. Mais j'ai trouvé que cela produisait un comportement ennuyeux lorsque d' autres commandes sont exécutées «de manière invalide», comme appuyer sur DEL à la fin d'une ligne: cela effacerait la ligne et la remplacerait par [19;un code d'échappement d'apparence similaire. En fin de compte, j'ai trouvé que le mappage (c.- "\e\e"à kill-whole-line-d. Appuyer deux fois sur Esc pour effacer la ligne) était un bon compromis.
j_random_hacker
@j_random_hacker: Hm, j'aime ça. Je frappe souvent Escplusieurs fois de toute façon, donc je pourrais essayer. Je l'ai actuellement lié à Ctrl+ Delmais je ne m'en souviens pas.
Wilson F