In bash, come si cancella l'input corrente?


172

Supponiamo che in bash inizi a scrivere un comando come:

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

e poi renditi conto che non vuoi eseguire questo dopo tutto. C'è un modo per cancellare l'input con una o due sequenze di tasti?

Quello che ho fatto di recente è anteporre l'eco e racchiudere l'input tra virgolette (Ctrl + A echo ",, Ctrl + E, ") quindi premere Invio. C'è un modo più veloce?


Oppure, supponi di aver incollato un comando e di aver capito che era la riga sbagliata. Backspace diventa davvero vecchio dopo circa 20 personaggi!
bgStack15,

<kbd> Ctrl </ kbd> - <kbd> C </ kbd>, se si desidera mantenere la cronologia fare riferimento a stackoverflow.com/a/9679852/6521116
Kris Roofe

Risposte:


286
  1. Premi Ctrl- Uper cancellare tutto prima del cursore. Il comando eliminato verrà archiviato in un buffer. Premere Ctrl- Yper incollare il comando eliminato.

    (Opzionale: premere Endo Ctrl- Eper saltare prima alla fine dell'ingresso.)

  2. In alternativa, premere Ctrl- Cper interrompere ciò che si sta digitando.


28
C'è un avvertimento: Ctrl-C ucciderà il prompt corrente, avvierà un nuovo prompt e imposterà il codice di ritorno su 1.
user716468

14
Non abituarti, usa Ctrl-U. Ctrl-C non è così male in bash, ma se hai ad esempio un prompt client mysql, Ctrl-C si disconnetterà dal server che è davvero fastidioso.
Christian,

1
Si noti che su molti sistemi, esiste anche un carattere 'kill' terminale che uccide l'input finora. Spesso questo è control-X. Puoi verificare con stty -a. E questo funzionerà con qualsiasi programma che non modifica attivamente i controlli del terminale.
Jonathan Leffler,

Ctrl-A seguito da un Ctrl-K funziona anche. Il testo "ucciso" viene memorizzato e puoi incollarlo usando Ctrl-Y. Questi tasti infatti provengono dalla libreria della linea di lettura: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html .. in modo da poterli trovare in qualsiasi strumento che l'interfaccia utente utilizza la libreria (In realtà Emacs, bash, eccetera..). Puoi personalizzare il suo comportamento modificando il file .inputrc (dai un'occhiata al link sopra per maggiori dettagli).
rkachach,

93

Prova Ctrl+ U. Ciò cancella la riga di input.


7
Grazie, ho quasi accettato questa come risposta. Ma ho scoperto che cancella solo l'input prima del cursore. In alcuni casi sono nel mezzo della modifica del comando, quindi preferirei ricordare Ctrl + C invece di Ctrl + U come semplicemente "scarta l'input corrente".
user85509


21

Ctrl- U, Ctrl- Kfa anche il trucco.

Ctrl- Uelimina tutto dall'inizio della riga fino al cursore, Ctrl- Kelimina tutto dal cursore alla fine della riga. (A volte è utile usarne solo uno.)


13

Ci sono due opzioni per farlo

ctrl+ c- questo cancella l'intera linea, indipendentemente da dove si trova il cursore.

ctrl+ u- cancella la linea dalla posizione del cursore all'inizio.


2
"Considera che l'uso di Cu (o Ce e poi Cu) memorizzerà ciò che cancelli in un buffer in modo da poterlo incollare successivamente usando Cy." Markis è un comando semplice più semplice è ctrl + _. stackoverflow.com/questions/1056440/… ha risposto con john kug - appena iniziato stackoverflow non ha abbastanza punti per aggiungere un commento alla tua risposta.
vks,

9

Una bella scorciatoia sta premendo Esc#. Anticiperà un #carattere (rendendo così la riga un commento) e quindi premi invio. Se poi decidi che hai ancora bisogno del comando, ce l'hai ancora nella tua storia :)


3
Nella maggior parte dei terminali, questo è anche lo stesso di Alt + #, che lo rende una sequenza di tasti (accordata).
Dolda 2000,

Una soluzione semplice ma intelligente e penso che questo sia un modo più facile da usare per annullare un comando. Esattamente quello che stavo cercando :)
Cas

9

Premendo Escpiù Backspacein bash si cancella tutto fino alla posizione del cursore.

(In Cygwin, questo cancellerà l'input fino alla parola successiva. Le parole sono separate da spazi, caratteri di sottolineatura, ...)


3

Considera che l'utilizzo di Ctrl- U(o Ctrl- Ee quindi Ctrl- U) memorizzerà ciò che cancelli in un buffer in modo da poterlo successivamente incollare usando Ctrl- Y.


3

Se si utilizza Bash in modalità vi (impostarlo con set -o vi), quindi premere Escper passare alla modalità normale di vi e digitare ddper eliminare la riga corrente!


3

Questa è un'espansione della risposta di knittl che memorizza la linea nella cronologia della console con il prefisso con un hash. Superare gli inconvenienti degli Appunti, come la sovrascrittura accidentale o l'impossibilità di visualizzare la linea di taglio per riferimento.

Riga di commento e ritorno Nuovo prompt

Utilizzare uno dei tasti di scelta rapida:

  • Esc,#
  • Alt+#

Un carattere hash #verrà anteposto alla riga, trasformando così l'intera riga in un commento. Restituirà anche un nuovo prompt, come se l'utente fosse stato premuto invio. per esempio

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

Recupera riga commentata

Per ripristinare la vecchia riga dalla cronologia della console, utilizzare una delle seguenti scorciatoie:

  • Up
  • Ctrl+p

Ripeti la scorciatoia da tastiera finché non appare la riga desiderata.


Rimozione prefisso hash rapido

Per rimuovere il #prefisso hash della linea ci sono alcune diverse opzioni disponibili:

Rimuovi il primo carattere ed esegui immediatamente il comando:

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

Sposta il cursore per avviare e rimuovere il primo carattere, senza eseguire il comando:

  • Home, Delete
  • Ctrl+ a, Ctrl+d

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.