¿Cómo dejo que bash autocomplete comodines?

10

Si tengo un directorio que contiene los archivos

foo.bar.a.cat
foo.bar.a.hat

y escribo ls f+ TABel bash shell se autocompleta ls foo.bar.a.. Si escribo ls *bar*+, TABme gustaría que se complete automáticamente *bar*.a.. es posible?

Esto se parece a la pregunta

¿Cómo habilitar la finalización de tabulación de comodines en bash?

pero la respuesta sugerida, "funciona fuera de la caja para mí", no. También lo he intentado TAB TAB, sin efecto. El comando `` bash --version givesGNU bash, versión 4.2.37 (1) -release (x86_64-pc-linux-gnu) '.

Enganchado
fuente

Respuestas:

14

Tú quieres:

inserción-terminaciones

ALT* para 'insertar todas las terminaciones'

Con esto, un directorio que contiene el nombre de los archivos 'aa ab ac ad'
ls a*seguido de alt + *completaría parals aa ab ac ad

Entrada de página de manual sobre enlace:

inserción-terminaciones (M- *)

Inserte todas las terminaciones del texto antes del punto que habría sido generado por las posibles terminaciones.

glob-expand-word

En algunos sistemas, lo anterior no funcionará con caracteres comodín, lo siguiente sí funciona en dichos sistemas para mí:

ctrlx, *(un combo de dos tiempos)

Ejemplo: completé un directorio con:

touch {a,b,c,d,e,f}{1,2,3,4,5,6,7,8,9,0}00{a,b,c,d,f,e}

Luego lo ls *100*seguí ctrl + x, *, lo que convierte mi readline en:

ls a100a a100b a100c a100d a100e a100f b100a b100b b100c b100d b100e b100f c100a c100b c100c c100d c100e c100f d100a d100b d100c d100d d100e d100f e100a e100b e100c e100d e100e e100f f100a f100b f100c f100d f100e f100f

Entrada de página de manual para enlace:

palabra de expansión global (Cx *)

La palabra anterior al punto se trata como un patrón para la expansión del nombre de ruta y se inserta la lista de nombres de archivo coincidentes, reemplazando la palabra. Si se proporciona un argumento numérico, se agrega un '*' antes de la expansión del nombre de ruta.

Página de hombre

recatado
fuente
Esto no funciona (al menos para mí). Crear los archivos touch aa ab ac ady escribir ls aseguido de alt+*da la lista, pero hacerlo con ls a*no. Los comodines son el punto de la pregunta.
Enganchado
@ Hook Esto funciona para mí GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)y GNU bash, version 4.2.0(1)-release (x86_64--netbsd)no GNU bash, version 4.2.45(2)-release (i386-apple-darwin12.2.0). Y por trabajado, quiero decir que se archivó en el texto. Verificará mis archivos conf para ver si tengo algo extra.
recatada
Eso es extraño, ¿por qué una cosa tan simple cambiaría de una versión a otra? ¿Alguna idea sobre cómo habilitarlo o está integrado en el momento de la compilación?
Enganchado
@Hooked También estoy un poco perplejo ... También falla en mi raspberry pi GNU bash, version 4.2.37(1)-release (arm-unknown-linux-gnueabihf)(raspbian)
recatada
@Hooked Encontró enlace aliterativo que funciona en sistemas donde el primero no tenía, para mí.
recatada
8

Intente agregar esto a ~ / .inputrc:

set show-all-if-ambiguous on

show-all-if-ambiguous hace que presionar la tecla una vez (en lugar de dos veces) enumere todas las finalizaciones. También hace que la primera pestaña presione insertar prefijos compartidos de expresiones globales.

$ touch 1.0.{1,2}
$ echo *0* # I pressed tab once here
1.0.1  1.0.2
$ echo 1.0.

glob-complete-word (\ eg) también completaría *0(sin *al final) a 1.0.. También completa por ejemplo /System/Library/Launch*/*Findea /System/Library/LaunchAgents/com.apple.Finder.plist.

Si quería convertir *a 1.0.1 1.0.2en el ejemplo anterior, utilizar cualquiera de insert-terminaciones (\ e *) o Glob-expand-palabra (\ Cx *).

Lri
fuente
4

Este problema es causado por errores en el paquete "bash-complete".

Cuando el paquete no está instalado, bash realiza su finalización predeterminada, este es un motor de finalización de nombre de archivo generalizado bastante bueno.

Se supone que el paquete "bash-complete" debe mirar el resto de la línea y ser "inteligente" sobre las listas que genera. Sin embargo, no puede duplicar con éxito la expansión "glob".

Personalmente, creo que el paquete se está esforzando demasiado y termina siendo utilizable solo por el "usuario común más tonto".

Sin embargo, antes de eliminarlo, es posible que desee comprobar la parte superior del archivo "/ usr / share / bash-completar / bash_completion" para obtener adiciones útiles a su .bashrc para 'ajuste bruto' de la finalización de bash incorporada.

Por cierto: tiene más de cien errores registrados ... https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=bash-completion

usuario3710044
fuente
$ sudo yum erase bash-complete # solucionó el problema para mí
user2449151