Finalización de bash: mostrar siempre todos los archivos

Finalización de bash: mostrar siempre todos los archivos

Lo instalé recientemente bash-completion(a través de homebrew). Ahora omite archivos en la lista de finalización quedesearse muestra y omite por completo opciones válidas, como esta:

[alex@mbp foo]$ ls
bar.csv foo.csv
[alex@mbp foo]$ sh ../dosomething.sh fo<TAB>
((nothing shown))

Como usuario intensivo de línea de comandos, esto es extremadamente molesto. ¿Alguien puede decirme cómo desactivar este comportamiento? No pude encontrar nada útil en la documentación ni en Google.

La finalización de bashPreguntas más frecuentesdice:

P. El código de finalización de bash impide que algunos comandos se completen en archivos con extensiones que son legítimas en mi entorno. ¿Tengo que desactivar la finalización de ese comando para poder completar los archivos que necesito?

R. No. Utilice M-/ para (en palabras de la página de manual de bash) intentar completar el nombre del archivo en el texto a la izquierda del cursor. Esto evitará cualquier restricción de tipo de archivo establecida por el código de finalización de bash.

Pero esta no es una solución aceptable para mí: quiero que "TAB" muestre todos los archivos/directorios independientemente de si la extensión es válida para el archivo o no (así es como me ha funcionado bien durante los últimos 20 años).

¿Cómo puedo conseguir esto?

Preferiría una configuración .bashrc/ .bash_profileen lugar de eliminar scripts de finalización global. Así es como incluyo actualmente la finalización de bash (es solo una instalación casera estándar):

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion

Actualización: he visto estoCompletar la pestaña de nombre de archivo Bashpero no es exactamente lo que quiero, ya que requiere demasiado trabajo manual para cada extensión de archivo posible en la tierra/mi sistema.

Respuesta1

La respuesta aceptada todavía no soluciona realmente el problema, ya que interrumpe la finalización del comando (es decir, "pyt+ TAB" para obtener Python, etc.), ya que no está incluido en el nombre de archivo completo.

complete -o default python

Esto no solucionará el problema para todos los comandos (solo "python" en este ejemplo), pero lo solucionará para comandos particulares que se comportan muy mal. Desafortunadamente, no parece haber una forma clara de establecer "predeterminado" (es decir, el valor predeterminado de Readline) en todo; debe hacerse para todos y cada uno de los comandos que pueda utilizar. O utilice la solución alternativa .inputrc anterior.

Respuesta2

También me molestó esto, así que leí el manual de bash. Creo que el comportamiento deseado se puede lograr con esto como ~/.inputrcarchivo:

TAB: complete-filename
M-/: complete

La finalización normal, con el conjunto completo de reglas, se asigna Meta-/a TAB.

información relacionada