Jakie są skróty klawiaturowe dla wiersza poleceń?

10

Mówię o skrótach klawiaturowych używanych w wierszu poleceń / terminalu.

Przykład: Ctrl+, cktóry zabija proces, Ctrl+ dto wylogowanie, Ctrl+ zktóry wysyła proces do tła ... itd.

Przetestowałem kilka i stwierdzili, że nie są one ani terminalu (czyli gnome-terminal, xterm, konsole) specyficzne ani powłoki (np bash, zsh) specyficzny, nawet praca na ttys.

Więc chcę wiedzieć:

  • Kto udostępnia te skróty?
  • Jak mogę je wymienić i zmodyfikować / zdefiniować?
Pandya
źródło
Spróbuj bind -pwymienić, tak jak w help bindprzypadku innych
Costas

Odpowiedzi:

10

Sterownik terminala jądra ( termios) interpretuje specjalne klucze, które można wpisać, aby wysłać sygnał do procesu, wysłać koniec pliku, usunąć znaki itp. Jest to podstawowa funkcjonalność jądra systemu Unix i bardzo podobna w większości implementacji systemów Unix i Linux.

Na sttypolecenie wyświetla lub ustawia termiosznaki specjalne, a także inne parametry dla terminala sterownika linii.

Wywołaj, stty -aaby zobaczyć bieżące wartości znaków specjalnych i inne „ustawienia linii terminala”. W poniższych przykładach widać, że intrto Ctrl+ C, eofto Ctrl+ D, suspto Ctrl+ Z. (Usunąłem inne dane wyjściowe, aby wyświetlić tylko ustawienia znaków specjalnych):

stty -a znaki specjalne w GNU / Linux:

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;

stty -a znaki specjalne w FreeBSD:

cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ^@; eol2 = ^@;
        erase = ^?; erase2 = ^H; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;

Aby zmienić wartość znaku specjalnego, na przykład aby zmienić znak przerwania z Ctrl+ Cna Ctrl+ Ewywołaj w sttyten sposób ( ^Eto dosłownie dwa znaki, circumflex ( ^), po którym następuje litera E):

stty intr '^E'

Aby uzyskać więcej informacji, zobacz strony podręcznika dla sttyi termios. W systemie GNU / Linux możesz także spojrzeć na tty_ioctlstronę podręcznika .

Uwagi:

intrKlawisz ( Ctrl+ Cdomyślnie), faktycznie nie zabić proces, ale powoduje, że jądro wysłać sygnał przerwania ( SIGINT) do wszystkich procesów w grupie procesowej. Procesy mogą zorganizować przechwytywanie lub ignorowanie sygnału, ale większość procesów zostanie zakończona, co jest zachowaniem domyślnym.

Powodem, dla którego Ctrl+ się dwylogowuje, jest to, że sterownik linii terminala wysyła EOF (koniec pliku) na standardowe wejście powłoki. Powłoka kończy działanie, gdy odbiera koniec pliku na swoim standardowym wejściu.

RobertL
źródło
@Sukminder na FreeBSD -adodano opcję POSIX stty.
RobertL
Próbowałem stty intr '^E'to działa (zestawy), ale tymczasowo i tylko dla bieżącego terminalu / tty. Jak mogę to zmienić globalnie i na stałe?
Pandya
Myślę, że najlepszym sposobem byłoby wywołanie sttyw $ HOME / .profile lub $ HOME / .bashrc lub innym pliku inicjującym uruchomienie powłoki.
RobertL
Próbowałem: działa z terminalem, ale nie działa wtty
Pandya
Co próbowałeś, co widzisz i co masz na myśli tty? Może to może być nowe pytanie?
RobertL
15

From http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/

Skróty do edycji poleceń

  • Ctrl+ a- przejdź do początku wiersza poleceń
  • Ctrl+ e- przejdź do końca wiersza poleceń
  • Ctrl+ k- usuń od kursora do końca wiersza poleceń
  • Ctrl+ u- usuń od kursora do początku wiersza poleceń
  • Ctrl+ w- usuń od kursora do początku słowa (tj. Usuń jedno słowo wstecz)
  • Ctrl+ y- wklej słowo lub tekst wycięty za pomocą jednego ze skrótów usuwania (takiego jak powyższy) za kursorem
  • Ctrl+ xx- przejście między początkiem wiersza poleceń a bieżącą pozycją kursora (iz powrotem)
  • Alt+ b- przejście o jedno słowo wstecz (lub przejście do początku słowa, na którym aktualnie znajduje się kursor)
  • Alt+ f- przejście o jedno słowo do przodu (lub przejście do końca słowa, na którym aktualnie znajduje się kursor)
  • Alt+ d- usuń do końca słowa zaczynającego się od kursora (całe słowo, jeśli kursor znajduje się na początku słowa)
  • Alt+ c- wielkie litery zaczynają się od kursora (całe słowo, jeśli kursor znajduje się na początku słowa)
  • Alt+ u- tworzy wielkie litery od kursora do końca słowa
  • Alt+ l- ustaw małe litery od kursora do końca słowa
  • Alt+ t- zamień bieżące słowo na poprzednie
  • Ctrl+ f- przesuń o jedną postać do przodu
  • Ctrl+ b- przejście do tyłu o jedną postać
  • Ctrl+ d- usuń znak pod kursorem
  • Ctrl+ h- usuń znak przed kursorem
  • Ctrl+ t- zamień znak pod kursorem na poprzedni

Skróty przywoływania poleceń

  • Ctrl+ r- przeszukaj historię do tyłu
  • Ctrl+ g- wyjście z trybu wyszukiwania historii
  • Ctrl+ p- poprzednie polecenie w historii (tj. Przejrzyj historię poleceń)
  • Ctrl+ n- następne polecenie w historii (tzn. Przejdź do przodu historii poleceń)
  • Alt+ .- użyj ostatniego słowa poprzedniego polecenia

Skróty kontroli poleceń

  • Ctrl+ l- wyczyść ekran
  • Ctrl+ s- zatrzymuje wyjście na ekran (w przypadku długotrwałego polecenia pełnego)
  • Ctrl+ q- zezwól na wyjście na ekran (jeśli poprzednio zostało zatrzymane przy użyciu polecenia powyżej)
  • Ctrl+ c- kończy polecenie
  • Ctrl+ z- zawiesić / zatrzymać polecenie

Polecenia Bash Bang (!)

Bash ma również kilka przydatnych funkcji, które wykorzystują! (huk), aby umożliwić ci wykonywanie funky z poleceniami bash .

  • !! - uruchom ostatnie polecenie
  • ! bla - uruchom najnowszą komendę, która zaczyna się od 'bla' (np.! ls)
  • ! blah: p - wypisuje polecenie, które uruchomi ! blah (dodaje również jako najnowszą komendę w historii poleceń)
  • ! $ - ostatnie słowo poprzedniego polecenia (takie samo jak Alt +. )
  • ! $: p - wypisz słowo, które zastąpiłoby ! $
  • ! * - poprzednie polecenie z wyjątkiem ostatniego słowa (np. Jeśli wpiszesz „ find some_file.txt / ”, to !! * Da ci „ find some_file.txt ”)
  • ! *: p - wydrukuj co ! * zastąpi
Jesus Cepeda
źródło
1
@ Sukminder Nie, Ctrl + S nie zatrzymuje wyjścia. Wygląda na to, że mylisz to z Ctrl + Z.
Gilles „SO- przestań być zły”
Zobacz także: Emacs.
Erich
Miły! A czy jest jakiś sposób, aby dotrzeć do miejsca ^U, które stty -apokazuje zdefiniowane dla SIGKILL na Linuksie, z basha? Najlepiej bez definiowania elementów readline (być może za pomocą trzeciego klawisza mod / meta). Zakładam, że jest to cień tylko przez powiązanie readline ctrl + u?
nyov