Bash: premendo Esc 4 volte


11

Quando premo Esc 4 volte in un terminale Bash, viene visualizzato qualcosa del genere:

-bash-4.1$
Display all 2837 possibilities? (y or n)
:
!
./
[
[[
]]
{
}
411toppm
a2p
ac
accept
accton
aclocal
aclocal-1.11
acpi_listen

Che cos'è questa funzione e come vengono trovate queste voci? (Alla seconda pressione esc, il terminale emette un segnale acustico.)

Risposte:


11
$ bind -p | grep 'complete$'
"\C-i": complete
"\M-\e": complete

Ciò dimostra che l'associazione dei tasti predefinita di Meta+Esc(e Ctrl+i) nella modalità di modifica della riga di comando di Emacs è la funzione Readline complete. Il Metatasto si trova di solito Escsulle tastiere senza un Metatasto esplicito . La documentazione di Readline per questa funzione dice

Tentativo di eseguire il completamento sul testo prima del punto. Il completamento effettivo eseguito è specifico dell'applicazione. Bash, ad esempio, tenta di completare il trattamento del testo come una variabile (se il testo inizia con $), nome utente (se il testo inizia con ~), nome host (se il testo inizia con @) o comando (inclusi alias e funzioni) a turno. Se nessuno di questi produce una corrispondenza, viene tentato il completamento del nome file. Gdb, d'altra parte, consente il completamento delle funzioni e delle variabili del programma e tenta il completamento del nome file solo in determinate circostanze.


Per quanto riguarda il tuo commento alla risposta di Anthon : No, premere Escdue volte non equivale a premere in Tabgenerale (a meno che non si trovi in ​​un programma che li associ entrambi alla stessa azione, come fa Readline per impostazione predefinita). Tuttavia Ctrl+i è lo stesso di Tab, proprio come Ctrl+[è lo stesso di Esc. Ciò significa che è possibile eseguire il completamento con Ctrl+[ Ctrl+[in bashse lo si desidera, purché double Escsia associato alla completefunzione Readline . Questo è utile se stai lavorando ad un terminale VT220, ad esempio, che manca del tasto Esc:

Tastiera tedesca VT220


Kusalananda, grazie per questa risposta approfondita. Informazioni sul tuo ultimo punto: perché premere Escdue volte (o \M-\e) non è lo stesso Tabdi bash, se entrambi completano?
flow2k,

1
@ flow2k È lo stesso se sia Esc-Esc che Tab sono associati alla completefunzione, che sono di default, ma non in generale (cioè i tasti premuti non sono "uguali"). Non puoi sostituire Tab con Esc-Esc ovunque, solo nei programmi che supportano readline. Tuttavia, puoi sostituire Tab con Ctrl-i o Esc con Ctrl- [ovunque.
Kusalananda

Un seguito se posso: non vedo Tabnell'output di bind -p. Perché? Forse perché Tabè "hardcoded" e non può essere associato?
flow2k,

1
@ flow2k No, Tab è identico a Ctrl-i. Cercare \C-i. Questa è un'equivalenza a livello hardware.
Kusalananda

8

Questo si chiama completamento del file e se non hai alcun comando precedente sulla riga di comando, bash ti offrirà di completare tutti i 2837 comandi di cui è a conoscenza, sia quelli incorporati che quelli trovati nel tuo PATH

Sono presentati in ordine ordinato


1
Interessante - quindi questo equivale a premere due volte la scheda. Forse 2 escape = 1 scheda?
flow2k,
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.