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?


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.


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.


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.)


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.


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 :)


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, ...)


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.


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!


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

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.