GNU/Linux >> Linux Esercitazione >  >> Linux

Perché Ctrl+m e Ctrl+q non vengono utilizzati nelle scorciatoie Bash?

Recentemente ho esaminato i tasti di scelta rapida di bash e ho cercato di trovarne uno appropriato per il mio tasto di attivazione tmux.

Trovo interessante che ctrl + m e ctrl + q non vengono utilizzati nelle scorciatoie bash, secondo https://en.wikipedia.org/wiki/Bash_(Unix_shell).

Perché non vengono utilizzati? Mi sento ctrl + m è abbastanza utile.

Queste due combinazioni sono intese dal design per DIY (define it yourself) utilizzo? O c'è un'altra storia?

Risposta accettata:

Ctrl+M invia lo stesso carattere (RET) del tasto Invio nel terminale. I programmi non hanno modo di distinguerli, quindi queste chiavi non possono essere configurate separatamente.

Ctrl+Q è già utilizzato per XON per impostazione predefinita, quindi non può essere utilizzato da Bash, ma dovresti comunque essere in grado di usarlo in tmux, perché tmux utilizza la modalità di input non elaborato.

Un programma GUI potrebbe leggere dalla tastiera che il tasto m è stato premuto con il modificatore Ctrl e utilizzare Ctrl+m come scorciatoia, ma una shell o qualsiasi programma terminale riceve le combinazioni Ctrl+tasto proprio come caratteri ascii da 0 a 26

[email protected] = 0
Ctrl+A = 1
Ctrl+B = 2

e così via. Puoi provare questo per vedere i valori

cat ctrlkeys <<EOF
^A^B^C^D^E^F
EOF
od -c ctrlkeys
0000000 001 002 003 004 005 006  n

Per inserire i valori, premi Ctrl+v prima di Ctrl+[a-f] per non interpretarli come valore grezzo.

Quando guardi la tabella ascii(7) puoi vedere i codici di controllo in una tabella con i caratteri corrispondenti @..Z sulla sinistra. Ad esempio

015   13    0D    CR  'r' (carriage ret)     115   77    4D    M

o

011   9     09    HT  't' (horizontal tab)   111   73    49    I

Il livello successivo che interpreta i codici di controllo prima di bash è stty (modifica e stampa le impostazioni del terminale)

stty -a
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;

vedere stty(1) per i significati di lnext o start e stop .

Vedi anche readline(3) come bash e altri programmi GNU cli usano quella libreria per controllare le linee di input e ovviamente bash(1) /READLINE, la sezione readline della pagina di manuale di bash.

Correlati:racchiudere e non racchiudere il valore di una variabile tra virgolette in bash?

Nota:XYZ(NUM) indica la pagina di manuale XYZ dalla sezione NUM, quindi il risultato di man NUM XYZ .


Linux
  1. Continuazioni della linea Bash dopo &&e || Documentato?

  2. Perché non posso usare Cd in uno script Bash??

  3. Perché la Regex in Bash funziona solo se è una variabile e non direttamente??

  4. Perché è Rm -rf e non Rmdir -rf?

  5. Perché Deis e che cos'è?

Sintassi ed esempi dell'istruzione Bash case

Bash pausa e continua

Comando di uscita Bash e codici di uscita

Che cos'è il comando Grep in Linux? Perché viene utilizzato e come funziona?

Perché eval dovrebbe essere evitato in Bash e cosa dovrei usare invece?

Perché Unix è ancora utilizzato se Linux è basato su di esso e Linux è gratuito?