Bash: presionando escapar 4 veces

11

Cuando presiono escape 4 veces en una terminal de bash, muestra algo como esto:

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

¿Qué es esta característica y cómo se encuentran estas entradas? (En la segunda pulsación esc, el terminal emite una alerta sonora).

flow2k
fuente

Respuestas:

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

Esto muestra que la combinación de teclas predeterminada de Meta+Esc(y Ctrl+i) en el modo de edición de línea de comandos de Emacs es la función Readline complete. La Metatecla generalmente se encuentra Escen teclados sin una Metatecla explícita . La documentación de Readline para esta función dice

Intente completar el texto antes del punto. La finalización real realizada es específica de la aplicación. Bash, por ejemplo, intenta completar el tratamiento del texto como una variable (si el texto comienza con $), nombre de usuario (si el texto comienza con ~), nombre de host (si el texto comienza con @) o comando (incluidos alias y funciones) a su vez. Si ninguno de estos produce una coincidencia, se intenta completar el nombre del archivo. Gdb, por otro lado, permite completar las funciones y variables del programa, y ​​solo intenta completar el nombre de archivo bajo ciertas circunstancias.


Con respecto a su comentario a la respuesta de Anthon : No, presionar Escdos veces no es lo mismo que presionar Tabgeneralmente (a menos que esté en un programa que los asigne a ambos a la misma acción, como lo hace Readline por defecto). Sin embargo, Ctrl+i es igual que Tab, igual que Ctrl+[es igual que Esc. Esto significa que puede completar con Ctrl+[ Ctrl+[in bashsi lo desea, siempre que el doble Escesté vinculado a la completefunción Readline . Esto es útil si está trabajando en un terminal VT220, por ejemplo, que carece de la tecla Escape:

Teclado alemán VT220

Kusalananda
fuente
Kusalananda, gracias por esta respuesta en profundidad. Sobre su último punto: ¿por qué presionar Escdos veces (o \M-\e) no es lo mismo que Taben bash, si ambos se completan?
flow2k
1
@ flow2k Es lo mismo si Esc-Esc y Tab están vinculados a la completefunción, que son por defecto, pero no generalmente (es decir, las pulsaciones de teclas no son "lo mismo"). No puede sustituir Tab con Esc-Esc en todas partes, solo en programas con capacidad de readline. Sin embargo, puede sustituir Tab con Ctrl-i o Esc con Ctrl- [en cualquier lugar.
Kusalananda
Un seguimiento si puedo: no veo Taben la salida de bind -p. ¿Porqué es eso? ¿Tal vez porque Tabestá "codificado" y no se puede atar?
flow2k
1
@ flow2k No, Tab es idéntico a Ctrl-i. Busque \C-i. Esta es una equivalencia a nivel de hardware.
Kusalananda
8

Eso se llama finalización de archivo, y si no tiene ningún comando anterior en la línea de comando, bash le ofrecerá completar todos los 2837 comandos que conoce, tanto los integrados como los que se encuentran en su PATH

Se presentan en orden ordenado

Anthon
fuente
1
Interesante, por lo que es lo mismo que presionar la tecla dos veces. ¿Quizás 2 escapes = 1 pestaña?
flow2k