Come ottenere il completamento automatico C ++ intelligente


32

Alcuni editor (come Visual Studio su Windows) eseguono il completamento automatico C ++ che comprendono il C ++. Ad esempio, dato:

#include <vector>

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

In Visual Studio il completamento automatico conosce l'unico metodo std::vector<int>che inizia con un i è insert.

È possibile ottenere questo tipo di completamento automatico in vim?


3
Il plug-in YouCompleteMe può apprendere i termini per il completamento automatico e comprendere le lingue della famiglia C.
alxndr,

La documentazione di @alxndr era piuttosto confusa per me, nel caso in cui l'installazione con Vundle. E non appena ho iniziato con esso, il server YCM si è bloccato!
Abhinav Gauniyal,

YCM funziona relativamente bene per me, a meno che io non abbia materiale pesante (boost.geo) in cui aggiunge un sacco di energia al sistema. Nel frattempo la mia installazione è un casino, difficile estrarre parti YCM ...
johannes

@yo 'Questa domanda è abbastanza specifica per usare vim con C ++. Le soluzioni probabilmente non si applicheranno a qualcuno che usa Vim per scrivere Perl (e viceversa). Quindi c ++ mi sembra perfetto; ma ovviamente Vi e Vim Meta sono il posto giusto per discuterne.
derobert,

2
@AbhinavGauniyal Sembra simile ai problemi che ho visto prima con l'uso di YCM. Su quale sistema sei? Per OSX vedi qui . Non sto usando MacVim, ma ho installato CMake con Homebrew. Quindi sono cdpassato alla directory del plugin YCM ( ~/.vim/bundleper me) e ho funzionato ./install --clang-completer.
bsmith89,

Risposte:


28

mi piace molto clang_complete per questo. Richiede clang, e devi dirlo dove risiede libclang nel tuo sistema. Dopodiché, funziona meravigliosamente.

Le persone potrebbero suggerire YouCompleteMe, ma a dire il vero, quel plugin è enormemente gonfio per quello che dice di fare e richiede troppi passaggi per l'installazione. Ho anche avuto Vim segfault in più occasioni. Non potrei essere più felice con clang_complete.

Questo è quello che ottengo quando scrivo v.:clang-complete


4
Concordato. Ho avuto molti problemi con YCM (inclusi i segfault menzionati). E anche dopo ore di configurazione, non l'ho mai funzionato completamente.
CharlesL

1
Ho avuto un crash del server YCM numerose volte, in attesa di clang_complete, ecco le informazioni rilevanti per altri utenti: github.com/Rip-Rip/clang_complete/blob/master/doc/…
Abhinav Gauniyal

1
Ho avuto il contrario. YCM ha funzionato bene (anche se era un PITA da installare) ma il clang-complete non ha mai funzionato ...
Sardathrion - Reinstalla Monica

Riesci a nascondere tutto ciò in modo da poter vedere il tuo codice alcune righe verso il basso?
Matt C

@MatthewCliatt, cosa nascondi? Il menu popup? Non c'è niente di speciale nel codice. È proprio return 0sotto quel menu a comparsa.
akshay,

8

Il plugin YouCompleteMe ( Link ) ha funzionato perfettamente per me. Utilizza libclang per generare la funzione di completamento automatico, fornendo un completamento accurato.

Ha molta personalizzazione, specialmente quando si lavora con i flag di compilazione. È possibile modificare il "generatore di flag" modificando uno script Python per progetto ( esempio ). Ma per me il vantaggio principale è che supporta Clang Compilation Database ( Link! ). Questo significa che puoi compilare il tuo codice normalmente e chiedere a clang di sputare tutti i flag che ha usato per la compilazione, e usare quei flag con YouCompleteMe. Molto utile se si desidera che lo strumento di completamento automatico sia a conoscenza delle definizioni delle macro o della posizione di tutti i file delle intestazioni nel sistema senza alcuno sforzo di digitarlo manualmente.


3

YouCompleteMe non è così difficile da installare, ed è stato abbastanza stabile per me, sono migrato da clang_complete a YouCompleteMe anni fa. Una cosa che concordo, è davvero gonfia con un'enorme storia di commit, molte dipendenze interne e supporto per molte lingue che potrebbero non interessarti, ma finiranno per clonare i suoi sottomoduli associati. Quello, questo è un problema con YouComplemeMe, ancora .... fa il lavoro.

Ho lavorato su un fork con uno scopo speciale per supportare meglio C ++, puoi controllare questa gif mostrandola:

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

Sfrutta le nuove informazioni sui parametri che Clang è in grado di fornire, puoi saperne di più su questo da questo mio articolo: http://nosubstance.me/articles/2015-01-29-better-completion-for-cpp/ .


Oggi invece uso coc.nvim + ccls.
pepper_chico,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.