W bash, jak wyczyścić bieżące wejście?


172

Załóżmy, że w bashu zaczynasz pisać polecenie takie jak:

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

a potem zdaj sobie sprawę, że mimo wszystko nie chcesz tego wykonywać. Czy istnieje sposób na wyczyszczenie danych wejściowych za pomocą jednego lub dwóch naciśnięć klawiszy?

To, co ostatnio robiłem, to poprzedzanie echa i umieszczanie danych wejściowych w cudzysłowach (Ctrl + A echo ", Ctrl + E "), a następnie wciskanie enter. Czy jest szybszy sposób?


Lub załóżmy, że wklejasz polecenie i zdajesz sobie sprawę, że to niewłaściwa jedna linijka. Backspace naprawdę się starzeje po około 20 znakach!
bgStack15

<kbd> Ctrl </kbd> - <kbd> C </kbd>, jeśli chcesz zachować historię,
wejdź

Odpowiedzi:


286
  1. Naciśnij Ctrl-, Uaby usunąć wszystko przed kursorem. Usunięte polecenie zostanie zapisane w buforze. Naciśnij Ctrl-, Yaby wkleić usunięte polecenie.

    (Opcjonalnie: naciśnij Endlub Ctrl-, Eaby najpierw przeskoczyć na koniec wpisu).

  2. Możesz też nacisnąć Ctrl-, Caby przerwać wpisywanie.


28
Jest pewne zastrzeżenie: Ctrl-C zabije bieżący znak zachęty, uruchomi nowy monit i ustawi kod powrotu na 1.
user716468

14
Nie przyzwyczajaj się do tego, użyj Ctrl-U. Ctrl-C nie jest taki zły w bashu, ale jeśli masz np. Monit klienta mysql, Ctrl-C rozłączy się z serwerem, co jest naprawdę denerwujące.
Christian,

1
Zauważ, że w wielu systemach istnieje również znak „zabicia” terminala, który do tej pory zabija dane wejściowe. Często jest to Ctrl-X. Możesz to sprawdzić stty -a. I to zadziała z każdym programem, który nie modyfikuje aktywnie elementów sterujących terminala.
Jonathan Leffler

Ctrl-A, po którym następuje Ctrl-K, również działa. „Zabity” tekst jest przechowywany i można go wkleić za pomocą Ctrl-Y. W rzeczywistości te naciśnięcia klawiszy pochodzą z biblioteki linii odczytu: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html .. więc można je znaleźć w dowolnym narzędziu, które interfejs użytkownika korzysta z biblioteki (właściwie Emacs, bash, itp..). Możesz dostosować jego zachowanie, edytując plik .inputrc (więcej informacji znajdziesz w powyższym linku).
rkachach

93

Wypróbuj Ctrl+ U. To czyści linię wejściową.


7
Dzięki, prawie zaakceptowałem to jako odpowiedź. Ale odkryłem, że czyści tylko dane wejściowe przed kursorem. W niektórych przypadkach jestem w trakcie edycji polecenia, więc wolałbym raczej pamiętać Ctrl + C zamiast Ctrl + U jako po prostu „odrzucić bieżące wejście”.
user85509


21

Ctrl- U, Ctrl- Kteż załatwia sprawę.

Ctrl- Uusuwa wszystko od początku wiersza do kursora, Ctrl- Kusuwa wszystko od kursora do końca wiersza. (Czasami warto użyć tylko jednego z nich).


13

Istnieją dwie możliwości, aby to zrobić

ctrl+ c- czyści całą linię, bez względu na to, gdzie znajduje się kursor.

ctrl+ u- czyści linię od pozycji kursora do początku.


2
„Weź pod uwagę, że użycie Cu (lub Ce, a następnie Cu) zapisze to, co wyczyścisz w buforze, aby można było wkleić to później za pomocą Cy”. Markisisme prostszym pojedynczym poleceniem jest ctrl + _. stackoverflow.com/questions/1056440/ ... odpowiedział john kug - właśnie uruchomiłem stackoverflow Nie masz wystarczającej liczby punktów, aby dodać komentarz do Twojej odpowiedzi.
vks

9

Naciśnięcie fajnego skrótu Esc#. Doda #znak na początku (w ten sposób czyni wiersz komentarzem), a następnie naciśnie klawisz Enter. Jeśli wtedy zdecydujesz, że nadal potrzebujesz polecenia, nadal masz je w swojej historii :)


3
W większości terminali jest to to samo, co Alt + #, co powoduje, że jest to jedno (akordowe) naciśnięcie klawisza.
Dolda2000,

Proste, ale sprytne rozwiązanie i myślę, że jest to bardziej przyjazny dla użytkownika sposób anulowania polecenia. Dokładnie to, czego szukałem :)
Cas

9

Naciśnięcie Escplusa Backspacew bash wyczyści wszystko aż do pozycji kursora.

(W Cygwin wyczyści to dane wejściowe aż do następnego słowa. Słowa są oddzielone spacjami, podkreśleniami, ...)


3

Weź pod uwagę, że użycie Ctrl- U(lub Ctrl- Ea potem Ctrl- U) zapisze to, co wyczyścisz w buforze, abyś mógł później wkleić to za pomocą Ctrl- Y.


3

Jeśli używasz Bash w trybie vi (ustaw go za pomocą set -o vi), naciśnij, Escaby przejść do normalnego trybu vi, i wpisz, ddaby usunąć bieżącą linię!


3

Jest to rozwinięcie odpowiedzi knittla, która przechowuje wiersz w historii konsoli, poprzedzając go hashem. Pokonanie wad schowka, takich jak przypadkowe nadpisanie lub brak możliwości przeglądania linii cięcia w celach informacyjnych.

Linia komentarza i nowy monit

Użyj dowolnego skrótu klawiszowego:

  • Esc,#
  • Alt+#

Znak krzyżyka #zostanie dodany do wiersza, zmieniając w ten sposób cały wiersz w komentarz. Zwróci również nowy monit, tak jakby użytkownik nacisnął klawisz enter. na przykład

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

Pobierz skomentowaną linię

Aby odzyskać stary wiersz z historii konsoli, użyj jednego z następujących skrótów:

  • Up
  • Ctrl+p

Powtarzaj klawisz skrótu, aż pojawi się żądana linia.


Szybkie usuwanie prefiksu skrótu

Aby usunąć #przedrostek z linią, dostępnych jest kilka różnych opcji:

Usuń pierwszy znak i natychmiast wykonaj polecenie:

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

Przesuń kursor, aby rozpocząć i usunąć pierwszy znak, bez wykonywania polecenia:

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.