Como obter a conclusão automática inteligente de C ++

32

Alguns editores (como o visual studio no windows) executam o preenchimento automático de C ++ que entende C ++. Por exemplo, dado:

#include <vector>

int main(void) {
  std::vector<int> v;
  v.i

No visual studio, o preenchimento automático conhece o único método std::vector<int>que começa com um i insert.

É possível obter esse tipo de preenchimento automático no vim?

Chris Jefferson
fonte
3
O plug-in YouCompleteMe pode aprender termos para o preenchimento automático e entender os idiomas da família C.
Alxndr
A documentação do @alxndr foi bastante confusa para mim, para a instalação com o vundle. E assim que comecei, o servidor YCM travou!
Abhinav Gauniyal
O YCM funciona relativamente bem para mim, a menos que eu tenha itens pesados ​​de modelo (boost.geo), nos quais ele adiciona looooots de laod ao sistema. Minha configuração é um entretanto bagunça, difícil de peças extrato YCM ...
Johannes
@yo 'Esta questão é bastante específica para usar o vim com C ++. As soluções para isso provavelmente não se aplicarão a alguém que usa o Vim para escrever Perl (e vice-versa). Então c ++ parece bom para mim; mas é claro que Vi e Vim Meta são o lugar certo para discutir isso.
Derobert 03/02
2
@AbhinavGauniyal Isso soa semelhante aos problemas que eu já vi antes com o uso do YCM. Em que sistema você está? Para OSX, veja aqui . Não estou usando o MacVim, mas instalei o CMake com o Homebrew. Depois cdeditei o diretório do plugin YCM ( ~/.vim/bundlepara mim) e corri ./install --clang-completer.
precisa saber é o seguinte

Respostas:

28

Eu realmente gosto de clang_complete por isso. Requer clang, e você precisa dizer onde reside o libclang em seu sistema. Depois disso, funciona maravilhosamente.

As pessoas podem sugerir o YouCompleteMe, mas, para ser sincero, esse plug-in é bastante inchado pelo que diz que faz e requer muitas etapas para instalar. Eu também o segfault Vim em várias ocasiões. Eu não poderia estar mais feliz com clang_complete.

É isso que recebo quando digito v.:clang-complete

akshay
fonte
4
Acordado. Eu tive muitos problemas com o YCM (incluindo os segfaults mencionados). E mesmo depois de horas de configuração, eu nunca tinha funcionado completamente.
CharlesL
1
Eu tive o servidor YCM travado várias vezes, ansioso por clang_complete, aqui estão informações relevantes para outros usuários: github.com/Rip-Rip/clang_complete/blob/master/doc/…
Abhinav Gauniyal
1
Eu tive o contrário. YCM funcionou bem (mesmo que era um PITA para instalar), mas clang-complete nunca funcionou ...
Sardathrion - Reintegrar Monica
Você pode ocultar tudo isso para ver seu código algumas linhas abaixo?
Matt C
@MatthewCliatt, esconde o que? O menu pop-up? Não há nada de especial no código. É logo return 0abaixo desse menu pop-up.
akshay
8

O plugin YouCompleteMe ( Link ) foi ótimo para mim. Ele usa libclang para gerar o recurso de preenchimento automático, fornecendo uma conclusão precisa.

Possui muita personalização, especialmente ao trabalhar com sinalizadores de compilação. Você pode editar o "gerador de sinalizador" editando um script python por projeto ( exemplo ). Mas, para mim, a principal vantagem é que ele suporta o Clang Compilation Database ( Link! ). Isso significa que você pode compilar seu código normalmente e solicitar ao clang para cuspir todos os sinalizadores usados ​​na compilação e usá-los com o YouCompleteMe. Muito útil se você deseja que sua ferramenta de preenchimento automático esteja ciente de suas definições de macro ou do local de todos os arquivos de cabeçalhos no seu sistema sem nenhum esforço para digitá-lo manualmente.

Allan Hasegawa
fonte
3

O YouCompleteMe não é tão difícil de instalar e tem sido bastante estável para mim. Eu migrei do clang_complete para o YouCompleteMe anos atrás. Uma coisa que eu concordo, é realmente inchada com um enorme histórico de submissões, muitas dependências internas e suporte para muitos idiomas com os quais você pode não se importar, mas ainda assim vai acabar clonando seus submódulos associados. Isso, esse é um problema do YouComplemeMe, ainda assim ... ele faz o trabalho.

Eu trabalhei em uma bifurcação com finalidade especial para suportar melhor o C ++, você pode conferir este gif mostrando:

https://s3.amazonaws.com/f.cl.ly/items/1e2F0A123h331c1G0L0R/SadBart.gif

Ele aproveita as novas informações de parâmetro que a Clang pode fornecer. Você pode aprender mais sobre isso neste artigo meu: http://nosubstance.me/articles/2015-01-29-better-completion-for-cpp/ .

pepper_chico
fonte
Hoje eu uso coc.nvim + ccls.
pepper_chico 27/07