Essa é uma pergunta antiga, mas continuo voltando a ela de vez em quando com um vislumbre de esperança, pensando que um dia encontrarei a combinação certa de plugins para me dar o preenchimento automático perfeito no Vim. A pesquisa continua, mas essa é toda a pesquisa que fiz ao longo de vários anos.
Primeiro de tudo, você deve entender que o Vim é um editor de texto, não um editor de código. Os editores de código, IDES, são ferramentas como o conjunto de ferramentas Jetbrains, Visual Studio Code, Eclipse etc.
O Vim fundamentalmente não pode "completar automaticamente" o código com precisão. O preenchimento automático requer a introspecção do seu código-fonte e a análise do AST. Considere que o Vim não poderia executar operações assíncronas até o lançamento do Vim 8 em 2016, portanto, tentar executar qualquer tipo de software de introspecção de código em um plug-in do Vim seria um pesadelo. Está inserido na história do ecossistema Vim para não fazer isso. E todos os que tentam fazer isso, como o Tern For Vim, são realmente pesadelos para usar.
O melhor que um editor de texto pode fazer é trechos e completar as mesmas palavras / linhas / etc que ele conhece. Se você deseja autocompletar código, use um editor de código, não um editor de texto.
Estas são as suas opções, das quais eu tentei de tudo:
Dois atalhos de teclado úteis são Ctrl- n, que completam automaticamente uma palavra com base apenas nos buffers atuais que você abriu (sem introspecção de código) e Ctrl- xCtrl- lque completam automaticamente uma linha completa de código, se você deseja duplicá-lo. Você provavelmente sabe Ctrl- xCtrl- f, que completará automaticamente um nome de arquivo, incluindo o caminho, relativo ao atual :pwd
. O plug - in de padrão completo pode ser levemente útil se você não pesquisar /\v
.
" Omnicompletion " embutido no Vim acionado por Ctrl- x, Ctrl- o(é o que os autores do Vim querem que você digite todas as vezes) junto com vários plugins específicos de idioma , se existirem. Você pode :echo &omnifunc
em um arquivo verificar se você já possui o Omnicompletion configurado pelo Vim no seu arquivo de escolha.
AutoComplPop para abrir automaticamente o menu Omnicompletion acima ao digitar.
SuperTab, que permite pressionar Tabpara ativar a conclusão integrada do Vim.
O NeoComplCache, que é a conclusão de palavras-chave (não é especificado como é diferente da conclusão integrada do Vim), uma .vimrc
configuração complexa e o NeoSnippet para a conclusão de trechos .
Uma combinação monstruosa de exuberant-ctags
e DoctorJS
(um projeto Mozilla que está morto há um ano), TagBar e uma coisa caseira para extrair a conclusão dos arquivos de tags.
SnipMate , um plug-in básico de conclusão de tags, junto com trechos , e descubra por si próprio como adicionar trechos, pois é um pouco complicado.
UltiSnips junto com UltiSnips-Snippets que são diferentes dos snippets acima.
Tern for Vim , uma biblioteca promissora que faz uma introspecção de código real para obter o preenchimento automático correto. No entanto, é um buggy, muito lento, possui vazamentos de memória que causam um travamento no Vim e, possivelmente, são abandonware.
YouCompleteMe , uma conclusão distorcida conforme você digita que executa um servidor em segundo plano, juntamente com uma função doméstica para conclusão de trechos.
Eclim - uma nobre tentativa de executar um servidor Eclipse em segundo plano e informar ao Vim os preenchimentos automáticos que ele introspecta em tempo real. Funciona tanto quanto o Tern.
Finalmente, Closetag ou delimitMate ou autoclose ou um bananagram home-grown de auto fechamento de tags e parêntesis automaticamente em digitação.
Quase todos os plug-ins nesta lista entram em conflito com quase todos os outros plug-ins nesta lista.
O YouCompleteMe parece ser o líder do pacote, mas nunca consegui fazê-lo funcionar corretamente com a conclusão de tags, e sua conclusão de introspecção de código ainda tem que ser poderosa.
Minha opinião pessoal é que o estado atual do mundo do preenchimento automático do Vim está em mau estado. Para projetos pequenos, você pode se dar bem usando uma das soluções acima. Se você está lidando com uma API simples, pode se lembrar principalmente da conclusão da introspecção sem código. Se você estiver lidando com um projeto grande ou precisar dos benefícios da segurança de tipo durante a programação, um IDE completo ( Eclipse , Visual Studio , WebStorm ) será mais adequado para você do que o Vim.
A desvantagem de um IDE, é claro, é que você não terá mais o poder do Vim em suas mãos. Não usei um único IDE que tenha um modo Vim aceitável.
O Vim tem um viés de idioma moderado para idiomas do tipo C sem tipo e, de outra forma, espera que quaisquer recursos específicos do idioma sejam adicionados pelos usuários como plug-ins. Infelizmente, isso levou a um ecossistema fragmentado de preenchimento automático. Algumas opções são decentes, mas nada é perfeito e raramente existe um líder / melhor prática da maioria.
let g:acp_behaviorSnipmateLength=-1
consulte:help autocomplpop
) que você deve adicionar ao seu .vimrc, você a adicionou?