Quali sono le scorciatoie da tastiera per la riga di comando?


10

Sto parlando delle scorciatoie da tastiera che usi nella riga di comando / terminale.

Esempio: Ctrl+ cche uccide il processo, Ctrl+ dche si disconnette, Ctrl+ zche invia il processo in background ... ecc.

Ho provato alcuni e scoperto che essi non sono né terminale (cioè gnome-terminal, xterm, konsole) specifica né shell (cioè bash, zsh) specifico, hanno anche il lavoro a ttys.

Quindi, voglio sapere:

  • Chi fornisce queste scorciatoie?
  • Come posso elencarli e modificarli / definirli?

Prova bind -pad elencare, così come help bindper gli altri
Costas

Risposte:


10

Il driver terminale del kernel ( termios) interpreta le chiavi speciali che possono essere digitate per inviare un segnale a un processo, inviare la fine del file, cancellare i caratteri, ecc. Questa è la funzionalità base del kernel Unix e molto simile sulla maggior parte delle implementazioni Unix e Linux.

Il sttycomando visualizza o imposta i termioscaratteri speciali, nonché altri parametri per il driver della linea terminale.

Richiamare stty -aper vedere i valori correnti dei caratteri speciali e altre "impostazioni della linea terminale". Negli esempi seguenti, puoi vedere che intrè Ctrl+ C, eofè Ctrl+ D, suspè Ctrl+ Z. (Ho eliminato altri output per mostrare solo le impostazioni dei caratteri speciali):

stty -a caratteri speciali su 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 personaggi speciali su 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;

Per modificare il valore di un carattere speciale, ad esempio, per modificare il carattere di interruzione da Ctrl+ Ca Ctrl+ Einvocare in sttyquesto modo ( ^Esono letteralmente due caratteri, il circumflex ( ^) seguito dalla lettera E):

stty intr '^E'

Per ulteriori informazioni, consultare le pagine man di sttye termios. Su GNU / Linux puoi anche guardare la tty_ioctlpagina man.

Appunti:

La intrchiave ( Ctrl+ Cdi default), in realtà non uccide il processo, ma fa sì che il kernel invii un segnale di interruzione ( SIGINT) a tutti i processi all'interno del gruppo di processi. I processi possono disporre di catturare o ignorare il segnale, ma la maggior parte dei processi terminerà, che è il comportamento predefinito.

Il motivo per cui Ctrl+ dsi disconnette è perché il driver della linea terminale invia EOF (fine del file) sull'input standard della shell. La shell termina quando riceve la fine del file sul suo input standard.


@Sukminder, su FreeBSD, è -astata aggiunta l' opzione POSIX stty.
RobertL

Ho provato stty intr '^E'che funziona (imposta) ma temporaneamente e solo per il terminale / tty corrente. Come lo cambio a livello globale e permanente?
Pandya,

Penso che il modo migliore sarebbe invocare sttynel tuo $ HOME / .profile o $ HOME / .bashrc o qualche altro file di inizializzazione della shell.
RobertL

Ho provato: funziona con il terminale ma non ha alcun effettotty
Pandya,

Cosa hai provato, cosa vedi e cosa intendi tty? Forse quella potrebbe essere una nuova domanda?
RobertL,

14

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

Scorciatoie per la modifica dei comandi

  • Ctrl+ a- vai all'inizio della riga di comando
  • Ctrl+ e- vai alla fine della riga di comando
  • Ctrl+ k- elimina dal cursore alla fine della riga di comando
  • Ctrl+ u- elimina dal cursore all'inizio della riga di comando
  • Ctrl+ w- elimina dal cursore all'inizio della parola (ovvero elimina una parola all'indietro)
  • Ctrl+ y- incolla la parola o il testo che è stato tagliato utilizzando una delle scorciatoie per l'eliminazione (come quella sopra) dopo il cursore
  • Ctrl+ xx- sposta tra l'inizio della riga di comando e la posizione corrente del cursore (e viceversa)
  • Alt+ b- sposta indietro di una parola (o vai all'inizio della parola il cursore è attualmente attivo)
  • Alt+ f- sposta in avanti di una parola (o vai alla fine della parola il cursore è attualmente attivo)
  • Alt+ d- elimina fino alla fine della parola a partire dal cursore (parola intera se il cursore si trova all'inizio della parola)
  • Alt+ c- maiuscolo fino alla fine della parola che inizia dal cursore (parola intera se il cursore si trova all'inizio della parola)
  • Alt+ u- passa in maiuscolo dal cursore alla fine della parola
  • Alt+ l- passa in minuscolo dal cursore alla fine della parola
  • Alt+ t- scambia la parola corrente con la precedente
  • Ctrl+ f- sposta in avanti di un carattere
  • Ctrl+ b- sposta indietro di un carattere
  • Ctrl+ d- elimina il carattere sotto il cursore
  • Ctrl+ h- elimina il carattere prima del cursore
  • Ctrl+ t- scambia il carattere sotto il cursore con quello precedente

Scorciatoie Richiama comando

  • Ctrl+ r- cerca indietro nella cronologia
  • Ctrl+ g- fuga dalla modalità di ricerca della cronologia
  • Ctrl+ p- comando precedente nella cronologia (ovvero tornare indietro nella cronologia dei comandi)
  • Ctrl+ n- comando successivo nella cronologia (ovvero andare avanti nella cronologia dei comandi)
  • Alt+ .- usa l'ultima parola del comando precedente

Scorciatoie per il controllo dei comandi

  • Ctrl+ l- cancella lo schermo
  • Ctrl+ s- arresta l'output sullo schermo (per un comando dettagliato di lunga durata)
  • Ctrl+ q- consenti l'output sullo schermo (se precedentemente interrotto usando il comando sopra)
  • Ctrl+ c- termina il comando
  • Ctrl+ z- sospende / arresta il comando

Comandi Bash Bang (!)

Bash ha anche alcune utili funzioni che usano! (bang) per permetterti di fare cose funky con i comandi bash .

  • !! - esegui l'ultimo comando
  • ! blah - esegui il comando più recente che inizia con 'blah' (es.! ls)
  • ! blah: p - stampa il comando che ! blah verrebbe eseguito (lo aggiunge anche come ultimo comando nella cronologia dei comandi)
  • ! $ - l'ultima parola del comando precedente (uguale a Alt +. )
  • ! $: p - stampa la parola che ! $ sostituirà
  • ! * - il comando precedente ad eccezione dell'ultima parola (ad es. Se si digita ' find some_file.txt / ', allora ! * Ti darebbe ' find some_file.txt ')
  • ! *: p - stampa cosa ! * sostituisce

1
@Sukminder No, Ctrl + S interrompe l'output. Sembra che tu lo stia confondendo con Ctrl + Z.
Gilles 'SO- smetti di essere malvagio' il

Vedi anche: Emacs.
Erich,

Bello! E c'è un modo per raggiungere il ^U, che stty -amostra definito per SIGKILL su Linux, da bash? Preferibilmente senza indefinire il materiale readline (forse attraverso una terza chiave mod / meta). Presumo che sia solo ombreggiato dal ctrl + u readline binding?
nyov,
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.