Tornar Bash Tab o Preenchimento Automático como "Contém" em todos os arquivos possíveis, em vez de "Começar com"

3

Eu quero fazer o bash autocomplete em TAB se comportar um pouco como oh-my-zsh.

Já adicionei ignorar maiúsculas e percorrer todas as possibilidades em cada guia.

Agora, atualmente, se eu tiver uma pasta no diretório chamada LinuxCommands e eu escrever Comm+TAB , ela não corresponderá à pasta LinuxCommands .

Existe alguma maneira de alterar o comportamento do bash para corresponder à palavra-chave inserida com nomes de pastas e arquivos com base em " filename contains keywords " em vez do comportamento atual " filename starts with keywords "?

Eu não acho que isso importe, já que é tudo. Mas caso isso aconteça, estou usando o MacOS Sierra.

Atualização 1

Atualmente, tenho este código no meu ~/.bashrc para essa modificação

    _cd_completion() {
        mapfile -t COMPREPLY < <(ls -d */ | grep "${COMP_WORDS[COMP_CWORD]}")
    }
    complete -F _cd_completion cd

    # If ~./inputrc doesn't exist yet, first include the original /etc/inputrc so we don't override it
    if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi
    # Add option to ~/.inputrc to enable case-insensitive tab completion
    bind 'set completion-ignore-case On'

    bind 'set show-all-if-ambiguous on'
    bind 'TAB:menu-complete'

Realiza as tarefas individualmente. Mas o desempenho integral é estranho. Ele autocomplete e depois percorre o conteúdo da mesma pasta após o preenchimento automático, que fica um nível atrás no diretório.

Ex: se eu tiver Folder1, Something2 e NewFolder3 e se eu pressionar cd F+TAB , ele mostrará > cd Folder1/ e quando eu pressionar TAB novamente, ele mostrará > cd Folder1/Something2 e a próxima vez > cd Folder1/NewFolder3 e continua percorrendo as pastas de níveis anteriores como esta.

    
por Keyur Golani 17.02.2017 / 20:32

1 resposta

1

Você pode adicionar suas próprias regras bash_completion em ~/.bashrc adicione o seguinte código ao arquivo:

_cd_completion() {
    mapfile -t COMPREPLY < <(ls -d */ | grep "${COMP_WORDS[COMP_CWORD]}")
}
complete -F _cd_completion cd

em seguida, você precisa reiniciar o terminal ou digitar o próximo comando: source ~/.bashrc

Se você quiser torná-lo em todo o sistema, você também pode adicionar as regras para bash_completion dentro do arquivo / usr / share / bash-conclusão / completions / cd

    
por 17.02.2017 / 21:23