Existe um plugin de preenchimento automático para o vim? Quais são minhas opções aqui?
No momento, estou usando o AutoComplPop , mas ele tem uma péssima integração com o snipMate que eu uso e com inatividade lenta nos arquivos Ruby (até <100 linhas).
Eu vi alguns outros plugins, mas eles estão mortos há pelo menos mais de um ano. Então, alguma ideia?
vim
autocomplete
naquad
fonte
fonte
let g:acp_behaviorSnipmateLength=-1
consulte:help autocomplpop
) que você deve adicionar ao seu .vimrc, você a adicionou?Respostas:
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
eDoctorJS
(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.
fonte
Aqui está uma boa: YouCompleteMe
YouCompleteMe que faz com que o menu suspenso apareça automaticamente enquanto você digita e oferece suporte à seleção difusa; portanto, se você tiver um identificador chamado
partition_finder
e digitar algo comoptf
durante a edição de um arquivo C ++, a lista de sugestões suspensa incluirá ambosprintf
epartition_finder
porque eles contêm as mesmas letras na mesma ordem. Se você tiver uma variável chamadamyBrain
, digitebrn
e isso será sugerido. O YouCompleteMe também prioriza as sugestões com base na frequência de uso anterior.fonte
Eu uso o neocomplcache com os snipmate snipmate + snipmate
você pode ver meu vimrc
fonte
Estou testando o necomplecache com o neosnippet. Acho que ele terá uma melhor integração, pois ambos são criados pela mesma pessoa.
fonte
Eu acredito que o vim tem um built-in chamado OmniComplete. No modo de inserção, use
ctrl+x,ctrl+o
.Caso contrário, você poderá concluir a palavra-chave no modo de inserção com
ctrl+n
. Ao invocá-lo, será exibido um menu suspenso, exibindo possíveis correspondências de palavras encontradas no arquivo que você está editando, bem como em outros arquivos que você abriu. Continue pressionandoctrl+n
para percorrer as opções. Quando chegar à palavra desejada, continue digitando normalmente.Se você não consegue encontrar a palavra desejada,
ctrl+n
acabará por ciclo de fora da lista e você pode continuar a digitar, ou você pode baterESC
e depoisbcw
irb
ack para o começo da palavra ofender ec
hange ow
ord ao que queria.fonte
<c-x><c-o>
Só funciona para coisas que o vim recebeu explicitamente como suporte. Por padrão, acho que ele só pode fazer algumas coisas menores e outras coisas como conclusão CSS, mas se você quiser algo como Eclipse, há um par de plugins vim que tentam fornecer isso para você.partition_finder
e eu digitar algo comoptf
durante a edição de um arquivo C ++, o menu suspenso irá sugerir tantoprintf
epartition_finder
porque eles contêm as mesmas letras na mesma ordem. Se eu tiver uma variável chamadamyBrain
, posso digitarbrn
e ela aparecerá. O YouCompleteMe também prioriza as sugestões com base na frequência de uso anterior. Confira aqui: valloric.github.io/YouCompleteMeEu peguei um novo plugin SimpleAutoComplPop no AutoComplPop original. No entanto, eu não estou familiarizado com ruby ou snipMate, você pode tentar e fico feliz em receber alguns feedbacks :)
fonte