En bash, comment effacer l'entrée actuelle?

172

Supposons que dans bash vous commencez à écrire une commande comme:

$ rm -rf /foo/bar/really/long/path/here

puis réalisez que vous ne voulez pas exécuter cela après tout. Existe-t-il un moyen d'effacer l'entrée avec une ou deux frappes?

Ce que j'ai fait ces derniers temps, c'est d'ajuster l'écho et de placer l'entrée entre guillemets (Ctrl + A`` echo "Ctrl + E, ") puis d'appuyer sur Entrée. Y at-il un moyen plus rapide?

user85509
la source
Ou, supposons que vous collez une commande et que vous vous rendez compte que ce n'était pas le bon one-liner. Backspace devient vraiment vieux après environ 20 caractères!
bgStack15
<kbd> Ctrl </kbd> - <kbd> C </kbd>, si vous souhaitez conserver l'historique, reportez-vous à stackoverflow.com/a/9679852/6521116
Kris Roofe

Réponses:

286
  1. Appuyez sur Ctrl- Upour tout supprimer avant le curseur. La commande supprimée sera stockée dans un tampon. Appuyez sur Ctrl- Ypour coller la commande supprimée.

    (Facultatif: appuyez sur Endou Ctrl- Epour passer d'abord à la fin de l'entrée.)

  2. Sinon, appuyez sur Ctrl- Cpour annuler ce que vous tapez.

John Kugelman
la source
28
Il y a une mise en garde: Ctrl-C supprimera l'invite actuelle, lancera une nouvelle invite et définira le code de retour sur 1.
user716468
14
Ne vous y habituez pas, utilisez Ctrl-U. Ctrl-C n'est pas si mal dans bash, mais si vous avez par exemple une invite client mysql, Ctrl-C se déconnectera du serveur, ce qui est vraiment ennuyeux.
Christian
1
Notez que sur de nombreux systèmes, il existe également un caractère «kill» de terminal qui tue l'entrée jusqu'à présent. Souvent, c'est control-X. Vous pouvez vérifier avec stty -a. Et cela fonctionnera avec n'importe quel programme qui ne modifie pas activement les commandes du terminal.
Jonathan Leffler
Ctrl-A suivi d'un Ctrl-K fonctionne également. Le texte "tué" est stocké et vous pouvez le coller en utilisant Ctrl-Y. Ces frappes proviennent en fait de la bibliothèque de lignes de lecture: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html .. vous pouvez donc les trouver dans n'importe quel outil dont l'interface utilisateur utilise la bibliothèque (en fait Emacs, bash, etc..). Vous pouvez personnaliser son comportement en éditant le fichier .inputrc (consultez le lien ci-dessus pour plus de détails).
rkachach
93

Essayez Ctrl+ U. Cela efface la ligne d'entrée.

gbarry
la source
7
Merci, j'ai presque accepté cela comme réponse. Mais j'ai trouvé qu'il efface uniquement l'entrée avant le curseur. Dans certains cas, je suis en train de modifier la commande, donc je préfère me souvenir de Ctrl + C au lieu de Ctrl + U comme simplement "ignorer l'entrée actuelle".
user85509
21

Ctrl- U, Ctrl- Kfait aussi l'affaire.

Ctrl- Usupprime tout du début de la ligne jusqu'au curseur, Ctrl- Ksupprime tout du curseur à la fin de la ligne. (Il est parfois utile de n'en utiliser qu'un seul.)

rur
la source
13

Il existe deux options pour ce faire

ctrl+ c- cela efface toute la ligne, peu importe où se trouve le curseur.

ctrl+ u- cela efface la ligne de la position du curseur jusqu'au début.

vks
la source
2
"Considérez que l'utilisation de Cu (ou Ce puis Cu) stockera ce que vous effacez dans un tampon afin que vous puissiez le coller plus tard en utilisant Cy." Markisisme une seule commande plus simple est ctrl + _. stackoverflow.com/questions/1056440/… répondu par john kug - vient de démarrer stackoverflow n'a pas assez de points pour ajouter un commentaire à votre réponse.
vks le
9

Un joli raccourci est pressé Esc#. Il ajoutera un #caractère avant (faisant ainsi de la ligne un commentaire), puis appuyez sur Entrée. Si vous décidez ensuite que vous avez toujours besoin de la commande, vous l'avez toujours dans votre historique :)

tricot
la source
3
Dans la plupart des terminaux, c'est également la même chose que Alt + #, ce qui en fait une touche (en accord).
Dolda2000
Une solution simple mais intelligente et je pense que c'est une façon plus conviviale d'annuler une commande. Exactement ce que je cherchais :)
Cas
9

En appuyant sur EscplusBackspace dans bash pour tout effacer jusqu'à la position du curseur.

(Dans Cygwin, cela effacera l'entrée jusqu'au mot suivant. Les mots sont séparés par des espaces, des traits de soulignement, ...)

Nippey
la source
3

Considérez que l'utilisation de Ctrl- U(ou Ctrl- Eet ensuite Ctrl- U) stockera ce que vous effacez dans une mémoire tampon afin que vous puissiez ensuite le coller plus tard en utilisant Ctrl- Y.

goncalotomes
la source
3

Si vous utilisez Bash en mode vi (définissez-le avec set -o vi), appuyez sur Escpour passer au mode normal de vi, et tapez ddpour supprimer la ligne actuelle!

Helmyano
la source
3

Ceci est une extension de la réponse de Knittl qui stocke la ligne dans l'historique de la console en préfixant avec un hachage. Surmonter les inconvénients du presse-papiers, tels que l'écrasement accidentel ou l'impossibilité d'afficher la ligne de coupe pour référence.

Ligne de commentaire et nouvelle invite de retour

Utilisez l'un des raccourcis clavier:

  • Esc,#
  • Alt+#

Un caractère de hachage #sera ajouté à la ligne, transformant ainsi la ligne entière en commentaire. Il renverra également une nouvelle invite, comme si l'utilisateur avait appuyé sur Entrée. par exemple

$ #rm -rf /foo/bar/really/long/path/here
$

Récupérer la ligne commentée

Pour récupérer l'ancienne ligne de l'historique de la console, utilisez l'un des raccourcis suivants:

  • Up
  • Ctrl+p

Répétez le raccourci clavier jusqu'à ce que la ligne souhaitée apparaisse.


Suppression rapide du préfixe de hachage

Pour supprimer le hachage de la ligne # préfixe de plusieurs options sont disponibles:

Supprimez le premier caractère et exécutez immédiatement la commande:

  • Esc, 1, Esc,#
  • Alt+ -, Alt+#

Déplacez le curseur pour démarrer et supprimer le premier caractère, sans exécuter la commande:

  • Home, Delete
  • Ctrl+ a, Ctrl+d
Cas
la source
2

Pour supprimer la ligne actuelle, essayez:

Ctrl- X, Ctrl-U

Comme alternative, vous pouvez utiliser:

Esc-D

ce qui nécessite dans ~ / .inputrc:

"\ed": kill-whole-line 

voir: http://codesnippets.joyent.com/posts/show/1690

goncalotomes
la source
Si vous voulez juste la touche d'échappement pour effacer toute la ligne, ajoutez "\e\e": kill-whole-line(il faut cependant appuyer deux fois sur la touche esc)
binaryfunt