¿Cómo hacer que el terminal se complete automáticamente cuando hay varios archivos / directorio?


32

Si tengo varios directorios, como:

afoo abar

a veces mi terminal rechazará el autocompletado cuando presiono tab (por ejemplo, "cd a" y luego tab), e imprimo la lista de directorios en su lugar. A veces incluso produce un sonido ruidoso y molesto. ¿Alguna idea de cómo hacer que se complete automáticamente en casos como este? Por ejemplo, puede mostrar abar primero, y luego afoo si presiono tab nuevamente. Vi que este es el caso en Windows, o alguna aplicación en Ubuntu

Respuestas:


46

Algo que me salva la vida es tener un ciclo bash a través de las posibilidades en lugar de mostrar una lista tonta.

Como bash está utilizando readlinepara su autocompletado, agregue las siguientes líneas a~/.inputrc

Una vez que estés satisfecho y ha probado a fondo por debajo solución para unos pocos días / semanas, cortar y pegar (no copie!) La misma configuración de ~/.inputrca /etc/inputrcla que contiene la configuración de todo el sistema, por lo que esta disponible para todos los usuarios de su sistema (incluido invitado).

El codez:

# mappings to have up and down arrow searching through history:
"\e[A": history-search-backward
"\e[B": history-search-forward
# mappings to have left and right arrow go left and right: 
"\e[C": forward-char
"\e[D": backward-char

# mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
"\t": menu-complete
"\e[Z": menu-complete-backward

luego exitsu terminal (o terminal remota como masilla) y ábralo nuevamente ...

Ejemplos:

  1. Cuando tiene 3 archivos: file1, file2y file3, y escribe:

    e fTabTabTab

    pasará por:

    e file1
    e file2
    e file3

    y cuando quieras ir hacia atrás, solo presiona Shift+Tab

  2. Cuando escribes:

    very-complicated-command with lots of command line parameters

    y la próxima vez que necesite el mismo comando, simplemente escriba:

    very

    y te escribirá:

    very-complicated-command with lots of command line parameters

¡Esto te ahorrará un montón de tiempo en bash! ;-)


2
+1, interesante, pero: 1. ~/.inputrcpodría ser preferible a /etc/inputrc, y 2. Creo que puede configurar esto bashdirectamente: unix.stackexchange.com/q/55203/70524 , unix.stackexchange.com/a/16926/70524
muru

Esto es bastante agradable, gracias (y tengo mi voto a favor). ¿Existe una forma universal de mostrar las opciones que atravesará, que combina lo mejor de ambos mundos? Me gusta la posibilidad de tab + tab con carpetas y subcomandos, etc., así que no tengo que recordarlos a todos (p git branch <tab through branches>. Ej ., Sin embargo, si pudiera ver una lista y una pestaña a través de sus elementos, ¡sería genial! Para directorios y archivos lses una opción para ver qué elementos están disponibles. Sin embargo, para los subcomandos no es tan fácil ni obvio, desafortunadamente.
Erik

¡Esto también funciona en PuTTy! Solo tuve que reiniciarlo una vez :)
np8

@Erik: Aparentemente, lo que pediste es posible pero no voy a editar mi respuesta para simplificar las cosas aquí. (antiguo comentario eliminado de que no es posible)
Fabby

18

Después del primero tab, debe insertar más letras. Entonces si escribes

cd a

y pulsa tabno obtienes nada y después de un segundo tab(inmediatamente después) obtienes una lista de los nombres que comienzan ay luego necesitas insertar un fpara que se complete automáticamente el resto

cd atabtabftabtab

resultará en

cd afoo

2
En mi humilde opinión: Esta es la forma correcta. Personalmente, encuentro el comportamiento de Windows muy molesto. Considere el caso en el que tiene muchos archivos comenzando ay necesita el último. Cuando accidentalmente presiona tabulador después ade recorrer la lista de todas las terminaciones posibles para llegar a la correcta.
Tobias

@Tobias: cuando accidentalmente presionas [Tab] demasiado pronto usando el otro sistema , todavía hay [Ctrl] [K] ... ;-)
Fabby
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.