In breve, sto cercando una funzione di completamento automatico funzionante per l'editor Vim. Ho già sostenuto che Vim sostituisce completamente un IDE su Linux e, sebbene ciò sia certamente vero, manca una caratteristica importante: il completamento automatico.
Conosco Ctrl+ N, integrazione Ctags esuberante , Taglist , cppcomplete e OmniCppComplete . Purtroppo, nessuna di queste corrisponde alla mia descrizione di "completamento automatico funzionante:"
- Ctrl+N funziona bene (solo) se hai dimenticato come si scrive
class
, owhile
. Oh bene. - Ctags ti dà i rudimenti ma ha molti svantaggi.
- Taglist è solo un wrapper Ctags e come tale eredita la maggior parte dei suoi svantaggi (sebbene funzioni bene per elencare le dichiarazioni).
- cppcomplete semplicemente non funziona come promesso, e non riesco a capire cosa ho fatto di sbagliato, o se "funziona" correttamente e i limiti sono di progettazione.
- OmniCppComplete sembra avere gli stessi problemi di cppcomplete, ovvero il completamento automatico non funziona correttamente. Inoltre, il
tags
file deve essere nuovamente aggiornato manualmente.
Sono consapevole del fatto che nemmeno gli IDE moderni e completi offrono un buon completamento del codice C ++. Ecco perché finora ho accettato la mancanza di Vim in quest'area. Ma penso che un livello fondamentale di completamento del codice non sia troppo da chiedere ed è in effetti necessario per un uso produttivo. Quindi sto cercando qualcosa che possa realizzare almeno le seguenti cose.
Consapevolezza della sintassi . promesse incomplete (ma non mantengono per me), completamento automatico corretto e consapevole di quanto segue:
variableName.abc variableName->abc typeName::abc
E davvero, qualsiasi altra cosa è completamente inutile.
Configurabilità . Devo specificare (facilmente) dove si trovano i file di origine e quindi da dove lo script ottiene le informazioni di completamento automatico. In effetti, ho un Makefile nella mia directory che specifica i percorsi di inclusione richiesti. Eclipse è in grado di interpretare le informazioni ivi contenute, perché non anche uno script Vim?
Attualità . Non appena cambio qualcosa nel mio file, voglio che il completamento automatico rifletta questo. Io non voglio attivare manualmente
ctags
(o qualcosa di simile). Inoltre, i cambiamenti dovrebbero essere incrementale , cioè quando ho cambiato solo un file è completamente inaccettabile perctags
ri-analizzare l'intero albero di directory (che può essere enorme).
Ho dimenticato qualcosa? Sentiti libero di aggiornare.
Sono a mio agio con un sacco di configurazione e / o armeggiare, ma non voglio programmare una soluzione da zero e non sono bravo a eseguire il debug degli script Vim.
Un'ultima nota, mi piacerebbe davvero qualcosa di simile per Java e C # ma immagino che sia troppo sperare: ctags
solo l'analisi dei file di codice e sia Java che C # hanno framework enormi, precompilati che dovrebbero essere indicizzati. Sfortunatamente, lo sviluppo di .NET senza un IDE è ancora più un PITA che un C ++.
clang_complete
è tecnicamente il più valido ma proibizionalmente lento a causa della mancanza di memorizzazione nella cache dei risultati e della compilazione parziale. Devo ammettere di non aver provato tutte le risposte perché alcune richiedono una configurazione contorta e che richiede tempo. Terrò il fiato per un plug-in utilizzabile ora che Clang finalmente consente agli sviluppatori di creare AST da fonti C ++ (fino ad ora non c'erano buoni parser gratuiti per C ++ disponibili).
clang_complete
recente? Può essere utilizzato libclang
con la memorizzazione nella cache ora e quindi dovrebbe essere più veloce.
formatted like this
.)
sh
(significa che è nella mia libreria) e seguiti dall'abbreviazione della mia classe. Ad esempioshP
per laParser
lezione. Quindi tutto ciò che devi fare è scrivereshP
e premere CTRL + p (o CTRL + n se vuoi) e ottenere i membri della classe dall'ultimo utilizzo al primo (o dal primo all'ultimo se CTRL + n)