Bash autocomplete com comando vim

13

No bash, o preenchimento automático de caminhos parou recentemente de funcionar ao emitir vim comandos em que o caminho é mais profundo que dois diretórios (continua a funcionar como esperado com outros comandos, como ls e cd ). / p>

Por exemplo, se eu digitar ls .config/btsync/bt e depois pressionar TAB, ele será expandido para ls .config/btsync/btsync.conf .

Se eu digitar vim .config/bt e, em seguida, pressionar TAB, ele será expandido para vim .config/btsync/ .

No entanto, se eu digitar vim .config/btsync/bt e, em seguida, pressionar TAB, nada acontece (esperaria que fosse expandido para vim .config/btsync/btsync.conf , como no exemplo ls , acima.

Eu recebo o mesmo problema ao executar como meu próprio usuário e ao executar como su.

Eu li este post que mencionou um problema com versões mais antigas do bash-completion, mas estou executando o 2.1-5.

ATUALIZAÇÃO: Depois de alguns testes adicionais, descobri que o problema raiz é que o bash irá somente completar nomes de diretórios, não nomes de arquivos.

ATUALIZAÇÃO: Acontece que bash-completion foi a causa geral. Veja meu segundo comentário sobre a resposta aceita.

Qualquer sugestão quanto à possível causa desse comportamento seria recebida com gratidão!

    
por TheRogueWolf 24.07.2014 / 11:45

3 respostas

10

Eu fiz mais pesquisas para você e aqui está o que eu encontrei - a chave para autocompletar é o bash command complete . Você pode imprimir as regras para vim usando:

complete -p vim

Da mesma forma, você pode remover essas regras específicas com:

complete -r vim

Este comando redefine para os padrões - os caminhos habituais e a conclusão dos nomes de arquivos sem qualquer lógica extra. Isso é provavelmente o que você quer.

Para mais informações, confira help complete ou man bash e procure a seção sobre o comando complete (é um bash embutido, por isso está documentado no bash manpage).

Um último ponto - as alterações acima só afetam a atual bash sessão, se você quiser remover as regras do vim após cada login, coloque o complete -r vim no seu ~/.bashrc .

Espero que ajude:)

    
por 26.07.2014 / 01:30
3

Bash, por padrão, autocomplete somente os nomes de caminho e arquivo. No entanto, o mecanismo é extensível e o bash pode ser ensinado a executar autocompletar diferentes para diferentes programas. Por exemplo, para git , é possível autocompletar os nomes de subcomando (clone, commit) e revisões em vez de apenas nomes de caminho. Às vezes é útil, às vezes bastante irritante - por exemplo, quando gzip -d se recusa a preencher automaticamente nomes de arquivos que não têm a extensão .gz .

O preenchimento de bash geralmente é configurado em /etc/bash_completion.d - você provavelmente encontrará um arquivo chamado vim lá. Esse é o arquivo que contém as regras de autocompletar para a linha de comando vim .

Agora você tem duas opções:

  1. Corrija o arquivo para preencher automaticamente os caminhos, como os usuários provavelmente esperam de qualquer maneira.
  2. Remova o arquivo para desativar as regras especiais de vim e só execute o preenchimento automático do caminho padrão.

E, claro, arquivar um relatório de bug que descreve o problema para que ele seja corrigido nas versões futuras:)

    
por 25.07.2014 / 06:00
2

Talvez você possa reinstalar a conclusão do bash:      apt-get install --reinstall bash-completion

E dê uma olhada no arquivo /etc/bash.bashrc:      nano /etc/bash.bashrc

E verifique se a linha a seguir está bem descomentada:

if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi

Em seguida, reinicie sua sessão de terminal

    
por 25.07.2014 / 14:40