Existem plugins de preenchimento automático para o vim?

11

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?

naquad
fonte
11
O ACP funciona muito bem aqui e não tenho nenhum problema com o SnipMate. Há uma configuração ( let g:acp_behaviorSnipmateLength=-1consulte :help autocomplpop) que você deve adicionar ao seu .vimrc, você a adicionou?
Romainl 6/10/11

Respostas:

15

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 &omnifuncem 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 .vimrcconfiguração complexa e o NeoSnippet para a conclusão de trechos .

  • Uma combinação monstruosa de exuberant-ctagse 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.

Andy Ray
fonte
6

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_findere digitar algo como ptfdurante a edição de um arquivo C ++, a lista de sugestões suspensa incluirá ambos printfe partition_finderporque eles contêm as mesmas letras na mesma ordem. Se você tiver uma variável chamada myBrain, digite brne isso será sugerido. O YouCompleteMe também prioriza as sugestões com base na frequência de uso anterior.

trusktr
fonte
2

Eu uso o neocomplcache com os snipmate snipmate + snipmate

let g:neocomplcache_snippets_dir='~/.vim/bundle/snipmate-snippets/snippets'

você pode ver meu vimrc

Juan Pablo
fonte
2

Estou testando o necomplecache com o neosnippet. Acho que ele terá uma melhor integração, pois ambos são criados pela mesma pessoa.

Precursor
fonte
1

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 pressionando ctrl+npara percorrer as opções. Quando chegar à palavra desejada, continue digitando normalmente.

Se você não consegue encontrar a palavra desejada, ctrl+nacabará por ciclo de fora da lista e você pode continuar a digitar, ou você pode bater ESCe depois bcwir back para o começo da palavra ofender e change o word ao que queria.

Conrad.Dean
fonte
O built-in do Vim parece péssimo. Sempre que eu pressiono <cx> <co>, apenas diz "Padrão não encontrado". No entanto, se eu pressionar <cn>, as conclusões aparecerão em uma lista suspensa logo abaixo da palavra sendo digitada. Aquilo é a mesma coisa? Existe uma maneira de fazer com que o menu suspenso do preenchimento automático apareça automaticamente, sem precisar pressionar um atalho?
trusktr
Não conheço um plug-in que faça o preenchimento automático aparecer sem interação, desculpe :(. <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ê.
Conrad.Dean
11
Eu encontrei um plugin para vim chamado youcompleteme que faz com que o menu suspenso aparecer automaticamente enquanto você digita, e suporta a seleção difusa, por isso, se eu tenho um identificador chamado partition_findere eu digitar algo como ptfdurante a edição de um arquivo C ++, o menu suspenso irá sugerir tanto printfe partition_finderporque eles contêm as mesmas letras na mesma ordem. Se eu tiver uma variável chamada myBrain, posso digitar brne ela aparecerá. O YouCompleteMe também prioriza as sugestões com base na frequência de uso anterior. Confira aqui: valloric.github.io/YouCompleteMe
trusktr
1

Eu 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 :)

rox
fonte