Kurz gesagt, ich suche nach einer funktionierenden Funktion zur automatischen Vervollständigung für den Vim-Editor. Ich habe bereits zuvor argumentiert, dass Vim eine IDE unter Linux vollständig ersetzt, und obwohl dies sicherlich zutrifft, fehlt ihm eine wichtige Funktion: die automatische Vervollständigung.
Ich kenne Ctrl+ N, Exuberant Ctags Integration , Taglist , cppcomplete und OmniCppComplete . Leider passt nichts davon zu meiner Beschreibung von "Working Autocompletion":
- Ctrl+N funktioniert (nur) gut, wenn Sie vergessen haben, wie man buchstabiert
class
, oderwhile
. Naja. - Ctags gibt Ihnen die Grundlagen, hat aber viele Nachteile.
- Taglist ist nur ein Ctags-Wrapper und erbt als solcher die meisten seiner Nachteile (obwohl es gut zum Auflisten von Deklarationen geeignet ist ).
- cppcomplete funktioniert einfach nicht wie versprochen, und ich kann nicht herausfinden, was ich falsch gemacht habe oder ob es richtig funktioniert und die Einschränkungen beabsichtigt sind.
- OmniCppComplete scheint die gleichen Probleme zu haben wie cppcomplete, dh die automatische Vervollständigung funktioniert nicht richtig. Außerdem muss die
tags
Datei erneut manuell aktualisiert werden.
Mir ist bewusst, dass nicht einmal moderne, vollständige IDEs eine gute Vervollständigung des C ++ - Codes bieten. Deshalb habe ich Vims Mangel in diesem Bereich bis jetzt akzeptiert. Ich denke jedoch, dass ein grundlegendes Maß an Code-Vervollständigung nicht zu viel verlangt und tatsächlich für die produktive Nutzung erforderlich ist. Also suche ich nach etwas, das zumindest die folgenden Dinge erreichen kann.
Syntaxbewusstsein . cppcomplete verspricht (liefert aber nicht für mich), korrekte, bereichsabhängige automatische Vervollständigung der folgenden Punkte:
variableName.abc variableName->abc typeName::abc
Und wirklich, alles andere ist völlig nutzlos.
Konfigurierbarkeit . Ich muss (leicht) angeben, wo sich die Quelldateien befinden und woher das Skript seine Informationen zur automatischen Vervollständigung bezieht. Tatsächlich habe ich ein Makefile in meinem Verzeichnis, das die erforderlichen Include-Pfade angibt. Eclipse kann die darin enthaltenen Informationen interpretieren. Warum nicht auch ein Vim-Skript?
Aktualität . Sobald ich etwas in meiner Datei ändere, möchte ich, dass die automatische Vervollständigung dies widerspiegelt. Ich möchte nicht manuell auslösen
ctags
(oder etwas Vergleichbares). Außerdem sollten Änderungen werden inkrementelle , dh wenn ich mich verändert habe nur eine Datei es ist völlig inakzeptabel fürctags
zu re-analysieren den gesamten Verzeichnisbaum (die sehr groß sein können).
Habe ich etwas vergessen Fühlen Sie sich frei zu aktualisieren.
Ich bin mit ziemlich viel Konfiguration und / oder Basteln vertraut, aber ich möchte keine Lösung von Grund auf neu programmieren, und ich bin nicht gut darin, Vim-Skripte zu debuggen.
Ein letzter Hinweis: Ich hätte gerne etwas Ähnliches für Java und C #, aber ich denke, das ist zu viel, um darauf zu hoffen: ctags
Nur Parsing-Codedateien und sowohl Java als auch C # verfügen über riesige, vorkompilierte Frameworks, die indiziert werden müssten. Leider ist die Entwicklung von .NET ohne IDE noch mehr eine PITA als C ++.
quelle
sh
(was bedeutet, dass es sich in meiner Bibliothek befindet) und werden von der Abkürzung meiner Klasse gefolgt. Zum BeispielshP
für dieParser
Klasse. Dann müssen Sie nur nochshP
STRG + p schreiben (oder STRG + n drücken, wenn Sie möchten) und die Klassenmitglieder von der letzten Verwendung zur ersten (oder zuerst zur letzten, wenn STRG + n)clang_complete
ist technisch am besten, aber aufgrund des fehlenden Zwischenspeicherns der Ergebnisse und der teilweisen Kompilierung unerschwinglich langsam. Ich muss zugeben, dass ich nicht alle Antworten ausprobiert habe, da einige ein kompliziertes, zeitaufwändiges Setup erfordern. Ich werde den Atem anhalten, um ein brauchbares Plugin zu erhalten, das es Entwicklern endlich ermöglicht, ASTs aus C ++ - Quellen zu erstellen (bis jetzt waren keine guten kostenlosen Parser für C ++ verfügbar).clang_complete
kürzlich versucht ? Es kannlibclang
jetzt mit Caching verwendet werden und sollte daher schneller sein.formatted like this
.)Antworten:
Versuchen Sie YouCompleteMe . Es verwendet Clang über die libclang-Schnittstelle und bietet semantische C / C ++ / Objective-C-Vervollständigung. Es ist ähnlich wie clang_complete, aber wesentlich schneller und mit Fuzzy-Matching.
Darüber hinaus bietet YCM auch eine semantische Vervollständigung für C #, Python, Go, TypeScript usw. Es bietet auch eine nicht semantische, bezeichnerbasierte Vervollständigung für Sprachen, für die es keine semantische Unterstützung gibt.
quelle
Es gibt auch clang_complete , das den
clang
Compiler verwendet , um die Code-Vervollständigung für C ++ - Projekte bereitzustellen. Es gibt eine weitere Frage mit Hinweisen zur Fehlerbehebung für dieses Plugin.Das Plugin scheint ziemlich gut zu funktionieren, solange das Projekt kompiliert wird, ist jedoch für große Projekte unerschwinglich langsam (da es versucht, die Tag-Liste vollständig zu kompilieren).
quelle
clang_complete
Plugin funktioniert gut unter Cygwin und Windows. Ich kann nichts über große Projekte sagen, weil ich keine habe. :)Hier ist der Kommentar, den ich zuvor gegeben habe:
Schau dir das an:
Dieser Link soll Ihnen helfen, wenn Sie Monodevelop unter MacOSX verwenden möchten
Viel Glück und viel Spaß beim Codieren.
quelle
Ich habe gerade das Projekt Eclim in einer anderen Frage verlinkt gefunden . Dies sieht zumindest für die Java-Integration vielversprechend aus.
quelle
Ich bin etwas spät zur Party, aber Autocomplpop könnte hilfreich sein.
quelle
ist das, wonach Sie suchen, so etwas wie Intellisense?
Insevim scheint das Problem anzugehen.
Link zu Screenshots hier
quelle
Hat jemand code_complete erwähnt?
Aber Sie mochten keine ctags, also ist dies wahrscheinlich nicht das, wonach Sie suchen ...
quelle