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 ++.
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 kann libclang
jetzt mit Caching verwendet werden und sollte daher schneller sein.
formatted like this
.)
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)