No bash, o preenchimento automático de caminhos recentemente parou de funcionar ao emitir vim
comandos em que o caminho é mais profundo que dois diretórios (continua a funcionar conforme o esperado com outros comandos, como ls
e cd
).
Por exemplo, se eu digitar ls .config/btsync/bt
e pressionar TAB, ele será expandido para ls .config/btsync/btsync.conf
.
Se eu digitar vim .config/bt
e pressionar TAB, ele será expandido para vim .config/btsync/
.
No entanto, se eu digitar vim .config/btsync/bt
e pressionar TAB, nada acontece (eu esperaria que ele fosse expandido para vim .config/btsync/btsync.conf
, como no ls
exemplo acima.
Eu recebo o mesmo problema ao executar como meu próprio usuário e ao executar como su.
Eu li este post que mencionava um problema com versões mais antigas do bash-conclusão, mas estou executando o 2.1-5.
ATUALIZAÇÃO: Após alguns testes adicionais, eu descobri que o problema principal é que o bash só completará nomes de diretórios, não nomes de arquivos.
ATUALIZAÇÃO: Acontece que essa bash-completion
foi a causa geral. Veja meu segundo comentário sobre a resposta aceita.
Qualquer sugestão sobre a causa potencial desse comportamento seria recebida com gratidão!
fonte
.bashrc
!.bashrc
post, conforme exigido.Respostas:
Eu fiz mais algumas pesquisas para você e aqui está o que eu encontrei - a chave para o preenchimento automático é o
bash
comandocomplete
. Você pode imprimir as regras devim
uso:Da mesma forma, você pode remover estas regras específicas com:
Esse comando redefine os padrões - os caminhos usuais e a conclusão de nomes de arquivos sem nenhuma lógica extra. Provavelmente é isso que você quer.
Para obter mais informações, consulte
help complete
ouman bash
procure a seção sobrecomplete
comando (é um bash embutido, portanto está documentado na página de manual do bash).Um último ponto - as alterações acima afetam apenas a
bash
sessão atual , se você deseja remover as regras do vim após cada login colocar ocomplete -r vim
seu~/.bashrc
.Espero que ajude :)
fonte
complete -p vim
comando retornadocomplete -F _filedir_xspec vim
foi removido pelocomplete -r vim
comando, resolvendo o problema. Vou fazer algumas leituras sobre ocomplete
comando e as informações retornadas pela opção -p. Um pouco confuso por que esse comportamento mudou, também investigará isso._filedir_xspec
função/usr/share/bash-completion/bash_completion
apenas conclui diretórios. Eu desinstaleibash-completion
, removi acomplete -r vim
linha da minha.bashrc
e reinicializei evim
agora me comporte conforme o esperado.O Bash por padrão preenche automaticamente apenas os nomes de caminho e arquivo. No entanto, o mecanismo é extensível e o bash pode ser ensinado a executar diferentes preenchimentos automáticos para diferentes programas. Por exemplo,
git
ele pode preencher automaticamente os nomes de subcomando (clonar, confirmar) e revisões em vez de apenas nomes de caminho. Às vezes é útil, às vezes bastante irritante - por exemplo, quandogzip -d
se recusa a preencher automaticamente nomes de arquivos que não têm a.gz
extensão.A conclusão do Bash geralmente é configurada
/etc/bash_completion.d
- você provavelmente encontrará um arquivo chamadovim
lá. Esse é o arquivo que contém as regras de preenchimento automático para avim
linha de comando.Agora você tem duas opções:
vim
regras especiais e execute apenas o preenchimento automático do caminho padrão.E, é claro, envie um relatório de bug que descreve o problema para que ele seja corrigido nas versões futuras :)
fonte
/etc/bash_completion.d
e há apenas umhg
arquivo presente (para Mercurial). Muito estranho./usr/share/bash-completion/
ou liste todos os arquivos dovim
pacote ou debash
oubash-completion
packages (não sabe como é chamado no ArchLinux). Estará lá em algum lugar.bash-completion
pacote mostra/usr/share/bash-completion/completions
contém regras para muitos programas, mas nãovim
. A listagem de arquivos instalados com ovim
pacote não mostra nenhum arquivo relacionado à conclusão e a pesquisa em todo o sistema usandofind / -name vim
também não mostra arquivos relacionados à conclusão.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 seguinte linha está bem comentada:
Em seguida, reinicie sua sessão do terminal
fonte
bash-completion
, testar ovim
comportamento e, em seguida, reinstalarbash-completion
e testar, mas ainda havia o mesmo problema nas duas circunstâncias. As linhas que você listou não estão presentes/etc/bash.bashrc
. Esta linha é, no entanto[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion