Como posso deixar curing autocomplete curingas?

8

Se eu tiver diretório contendo os arquivos

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

e eu digito ls f + TAB o autocompletes do shell bash para ls foo.bar.a. . Se eu digitar ls *bar* + TAB , eu gostaria que fosse preenchido automaticamente em *bar*.a. . Isso é possível?

Isso é semelhante à pergunta

Como habilitar a conclusão de tabulação de curingas no bash

mas a resposta sugerida, "funciona fora da caixa para mim", não. Eu também tentei TAB TAB , sem efeito. O comando '' bash --version gives GNU bash, versão 4.2.37 (1) -release (x86_64-pc-linux-gnu) '.

    
por Hooked 21.05.2013 / 17:09

3 respostas

12

Você quer:

insert-completions

ALT * para 'inserir todas as conclusões'

Com isso, um diretório contendo o nome dos arquivos 'aa ab ac ad'
ls a* seguido por alt + * seria concluído em ls aa ab ac ad

Entrada de página manual na ligação:

insert-completions (M-*)

Insert all completions of the text before point that would have been generated by possible-completions.

glob-expand-word

Em alguns sistemas acima, isso não funcionará com wildchars, o seguinte funciona nesses sistemas para mim:

ctrl x , * (uma combinação de dois tempos)

Exemplo: Eu preenchi um diretório com:

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

Eu então ls *100* seguido por ctrl + x, * , o que transforma minha linha de leitura em:

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 manual para ligação:

glob-expand-word (C-x *)

The word before point is treated as a pattern for pathname expansion, and the list of matching file names is inserted, replacing the word. If a numeric argument is supplied, a ‘*’ is appended before pathname expansion.

Página de manual

    
por 21.05.2013 / 17:29
8

Tente adicionar isso a ~ / .inputrc:

set show-all-if-ambiguous on

mostrar-tudo-se-ambíguo faz com que pressionar a tecla uma vez (em vez de duas vezes) liste todas as conclusões. Também faz com que a primeira prensa de tabulação insira prefixos compartilhados de expressões glob.

$ 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) também completará *0 (sem * no final) para 1.0. . Também completa, por exemplo, /System/Library/Launch*/*Finde to /System/Library/LaunchAgents/com.apple.Finder.plist .

Se você quisesse converter * para 1.0.1 1.0.2 no exemplo acima, use insert-completions (\ e *) ou glob-expand-word (\ C-x *).

    
por 21.05.2013 / 21:03
3

Este problema é causado por erros no pacote "bash-completion".

Quando o pacote não está instalado, o bash faz sua conclusão padrão, este é um ótimo mecanismo de conclusão de nome de arquivo generalizado.

O pacote "bash-completion" deve olhar para o resto da linha e ser "inteligente" sobre as listas que gera. No entanto, não é possível duplicar a expansão "glob" com sucesso.

Pessoalmente, acho que o pacote está tentando muito e acaba sendo usado apenas pelo "usuário comum mais idiota".

No entanto, antes de excluí-lo, você pode querer verificar a parte superior do arquivo "/ usr / share / bash-completion / bash_completion" para adições úteis ao seu .bashrc para 'ajuste bruto' do preenchimento bash integrado.

BTW: Tem mais de cem bugs registrados ... link

    
por 23.04.2016 / 00:05