bash - ignora maiúsculas e minúsculas mas desautoriza o preenchimento automático se for ambíguo

4

Recentemente eu enfrento inconveniente ao usar o bash auto complete com ignorar o caso.

Digamos que eu tenha este diretório:

[xiaobai@xiaobai test]$ l
total 20K
3407873 drwx------. 60 xiaobai xiaobai 4.0K May 25 17:17 ../
3409017 drwxrwxr-x.  2 xiaobai xiaobai 4.0K May 25 17:35 hello/
3681826 drwxrwxr-x.  2 xiaobai xiaobai 4.0K May 25 17:55 Hello_STACKOVERFLOW/
3681837 drwxrwxr-x.  2 xiaobai xiaobai 4.0K May 25 17:55 Hello_StackOverflow/
3412549 drwxrwxr-x.  5 xiaobai xiaobai 4.0K May 25 17:56 ./
[xiaobai@xiaobai test]$

depois cd h [Tab]:

[xiaobai@xiaobai test]$ cd h #and press [Tab]
hello/               Hello_StackOverflow/ Hello_STACKOVERFLOW/ 
[xiaobai@xiaobai test]$ cd hello #auto generate

Você notará que o novo prompt de comando vem com o preenchimento automático 'olá' enquanto houver alternativa 'Olá' existente. Mas aqui eu não tenho nenhum problema, porque eu posso inserir / OU pressione [Enter] para ir para dentro de hello /. Ou eu posso inserir sublinhado _ e pressione [Tab] para ir mais longe Olá _ *:

[xiaobai@xiaobai test]$ cd hello_ #and press [Tab]
Hello_StackOverflow/ Hello_STACKOVERFLOW/ 
[xiaobai@xiaobai test]$ cd Hello_StackOverflow #auto generate

Agora o problema se tornou óbvio, e se meu alvo fosse 'Hello_STACKOVERFLOW /'? Eu tenho que pressionar Back Space para deletar 'tackOverflow' e então inserir T + [Tab] para alcançar meu alvo.

O que eu quero é:

[xiaobai@xiaobai test]$ cd hello_ #and press [Tab]
Hello_StackOverflow/ Hello_STACKOVERFLOW/ 
[xiaobai@xiaobai test]$ cd Hello_S #without 'tackOverflow', so i just have to type T+[Tab] without redundant erase step.

Claro que não haveria esse problema se ignore-case ignore no meu arquivo inputrc . Mas eu gosto de ignorar o caso, mas evito auto completar quando ambíguo. É possível fazer isso?

    
por 林果皞 25.05.2015 / 13:21

1 resposta

2

Existe uma solução alternativa para o seu problema.

Tente:

bind 'set completion-ignore-case on'
bind 'TAB:menu-complete'
bind 'set menu-complete-display-prefix on'
bind 'set show-all-if-ambiguous on'

Digite cd h , Tab . Linha expande para cd hello .

Em seguida, digite _ , a aba . Linha expandida para cd Hello_StackOverflow

Pressione a tecla Tab , a aba . Linha expandida para cd Hello_STACKOVERFLOW/

Explicação:

menu-complete Similar to complete, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of menu-complete steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of bell-style) and the original text is restored. Thiscommand is intended to be bound to TAB, but is unbound by default.

Disponível desde bash-2.02-alpha1

menu-complete-display-prefix If set to On, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list.

Disponível desde bash-4.2-alpha

show-all-if-ambiguous This alters the default behavior of the completion functions. If set to On, words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell.

Trabalhe em conjunto com menu-complete-display-prefix desde bash-4.3-alpha

    
por 20.07.2015 / 12:22