Em poucas palavras, eu estou procurando um trabalho recurso autocompletar para o editor Vim. Tenho argumentado antes que Vim substitui completamente um IDE no Linux e enquanto isso é certamente verdade, ela não tem uma característica importante: autocompletar.
Eu sei sobre Ctrl+ N, integração Exuberant Ctags , Taglist , cppcomplete e OmniCppComplete . Infelizmente, nada disso se encaixa na minha descrição de "preenchimento automático de trabalho:"
- Ctrl+N funciona bem (apenas) se você esqueceu como se escreve
class
, ouwhile
. Ah bem. - O Ctags fornece os rudimentos, mas tem muitas desvantagens.
- A taglist é apenas um wrapper Ctags e, como tal, herda a maioria de suas desvantagens (embora funcione bem para listar declarações).
- O cppcomplete simplesmente não funciona como prometido, e não consigo descobrir o que fiz de errado, ou se está "funcionando" corretamente e as limitações são por design.
- OmniCppComplete parece ter os mesmos problemas que cppcomplete, ou seja, o preenchimento automático não funciona corretamente. Além disso, o
tags
arquivo novamente precisa ser atualizado manualmente.
Estou ciente do fato de que nem mesmo os IDEs modernos e completos oferecem uma boa conclusão de código C ++. É por isso que aceitei a falta de Vim nesta área até agora. Mas acho que um nível fundamental de conclusão de código não é pedir demais e é de fato necessário para o uso produtivo. Então, estou procurando por algo que possa realizar pelo menos as seguintes coisas.
Consciência de sintaxe . O cppcomplete promete (mas não entrega para mim), o preenchimento automático correto e com reconhecimento de escopo do seguinte:
variableName.abc variableName->abc typeName::abc
E realmente, qualquer outra coisa é completamente inútil.
Configurabilidade . Preciso especificar (facilmente) onde estão os arquivos de origem e, portanto, de onde o script obtém suas informações de preenchimento automático. Na verdade, eu tenho um Makefile no meu diretório que especifica os caminhos de inclusão necessários. O Eclipse pode interpretar as informações encontradas nele, por que não um script do Vim também?
Atualização . Assim que alterar algo no meu arquivo, quero que o preenchimento automático reflita isso. Eu não quero acionar manualmente
ctags
(ou algo comparável). Além disso, as mudanças devem ser incrementais , ou seja, quando eu mudei apenas um arquivo é completamente inaceitável paractags
a re-analisar toda a árvore de diretórios (que pode ser enorme).
Eu esqueci alguma coisa? Sinta-se livre para atualizar.
Sinto-me à vontade com muitas configurações e / ou ajustes, mas não quero programar uma solução do zero e não sou bom em depurar scripts do Vim.
Uma observação final, eu realmente gostaria de algo semelhante para Java e C #, mas acho que isso é demais para esperar: ctags
apenas analisa arquivos de código e ambos, Java e C #, têm estruturas enormes pré-compiladas que precisariam ser indexadas. Infelizmente, o desenvolvimento do .NET sem um IDE é ainda mais PITA que C ++.
fonte
sh
(significando que está na minha biblioteca) e seguidos pela abreviação de minha classe. Por exemploshP
paraParser
classe. Então tudo que você precisa fazer é escrevershP
e pressione Ctrl + p (ou CTRL + n se quiser) e obter os membros da classe do último uso para o primeiro (ou primeiro ao último, se CTRL + n)clang_complete
é tecnicamente o mais sólido, mas proibitivamente lento devido à falta de armazenamento em cache dos resultados e compilação parcial. Devo admitir que não tentei todas as respostas porque algumas exigem uma configuração complicada e demorada. Vou prender a respiração por um plug-in utilizável agora que o clang finalmente permite que os desenvolvedores criem ASTs a partir de fontes C ++ (até agora, não havia bons analisadores gratuitos para C ++ disponíveis).clang_complete
recentemente? Ele pode ser usadolibclang
com o cache agora e, portanto, deve ser mais rápido.formatted like this
.)Respostas:
Experimente o YouCompleteMe . Ele usa Clang através da interface libclang, oferecendo conclusão semântica de C / C ++ / Objective-C. É muito parecido com clang_complete, mas substancialmente mais rápido e com correspondência difusa.
Além do acima, o YCM também fornece conclusão semântica para C #, Python, Go, TypeScript etc. Também fornece conclusão não semântica, baseada em identificador, para idiomas para os quais não possui suporte semântico.
fonte
Também há clang_complete, que usa o
clang
compilador para fornecer a conclusão de código para projetos em C ++. Há outra pergunta com dicas de solução de problemas para este plug-in.O plug-in parece funcionar razoavelmente, desde que o projeto seja compilado, mas é proibitivamente lento para projetos grandes (já que ele tenta uma compilação completa para gerar a lista de tags).
fonte
clang_complete
plug-in funciona bem no Cygwin e no Windows. Não posso dizer nada sobre grandes projetos, porque não tenho nenhum. :)conforme solicitado, eis o comentário que dei anteriormente:
Veja isso:
este link deve ajudá-lo se você deseja usar o monodesenvolvimento em um MacOSX
Boa sorte e feliz codificação.
fonte
Acabei de encontrar o projeto Eclim vinculado em outra pergunta . Isso parece bastante promissor, pelo menos para a integração Java.
fonte
Estou um pouco atrasado para a festa, mas o preenchimento automático pode ser útil.
fonte
é o que você está procurando algo como intellisense?
O insevim parece abordar o problema.
link para capturas de tela aqui
fonte
Alguém mencionou code_complete?
Mas você não gostou das ctags, então provavelmente não é isso que você está procurando ...
fonte