it-swarm.com.de

Autovervollständigung in Vim

Kurz gesagt, ich suche nach einer funktionierenden Autovervollständigungsfunktion für den Vim-Editor. Ich habe vorhin argumentiert , dass Vim ein IDE unter Linux vollständig ersetzt, und obwohl dies sicherlich zutrifft, fehlt ihm eine wichtige Funktion: die automatische Vervollständigung.

Ich weiss Bescheid Ctrl+N, Überbordende Ctags-Integration , Taglist , cppcomplete und OmniCppComplete . Leider passt keines davon zu meiner Beschreibung von "Working Autocompletion:"

  • Ctrl+N funktioniert gut (nur), wenn Sie vergessen haben, wie man class oder while buchstabiert. 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 für Listing -Deklarationen funktioniert ).
  • 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 bestehen von Entwurf.
  • OmniCppComplete scheint die gleichen Probleme zu haben wie cppcomplete, d. H. Die automatische Vervollständigung funktioniert nicht ordnungsgemäß. Außerdem muss die Datei tags erneut manuell aktualisiert werden.

Mir ist bewusst, dass nicht einmal moderne, ausgereifte IDEs eine gute C++ - Code-Vervollständigung bieten. Deshalb habe ich Vims Mangel in diesem Bereich bis jetzt akzeptiert. Aber ich denke, eine grundlegende Ebene der Code-Vervollständigung ist nicht zu viel verlangt, und ist tatsächlich für die produktive Nutzung erforderlich. Also suche ich nach etwas, das mindestens die folgenden Dinge erreichen kann.

  • Syntaxerkennung . cppcomplete verspricht (liefert aber nicht für mich), korrekte, bereichsabhängige automatische Vervollständigung von Folgendem:

    variableName.abc
    variableName->abc
    typeName::abc
    

    Und wirklich, alles andere ist völlig nutzlos.

  • Konfigurierbarkeit . Ich muss (einfach) angeben, wo sich die Quelldateien befinden und von wo das Skript die Informationen zur automatischen Vervollständigung erhält. 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 ctags (oder etwas Vergleichbares) auslösen. Außerdem sollten Änderungen inkrementell sein, dh wenn ich nur eine Datei geändert habe, ist es völlig inakzeptabel, dass ctags das Ganze neu analysiert Verzeichnisbaum (der sehr groß sein kann).

Habe ich etwas vergessen Fühlen Sie sich frei zu aktualisieren.

Ich mag ziemlich viel Konfiguration und/oder Basteln, aber ich möchte keine Lösung von Grund auf neu programmieren, und ich bin nicht gut darin, Vim-Skripte zu debuggen.

Eine letzte Anmerkung, ich hätte wirklich gerne etwas Ähnliches für Java und C #, aber ich denke, das ist zu viel, um es zu hoffen: ctags analysiert nur Codedateien und beides Java und C # haben riesige, vorkompilierte Frameworks, die indiziert werden müssten. Leider ist Entwickeln von .NET ohne IDE sogar noch mehr eine PITA als C++.

244
Konrad Rudolph

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 semantische Vervollständigung für C #, Python, Go, TypeScript usw. Es bietet auch nicht semantische, kennungsbasierte Vervollständigung für Sprachen, für die keine semantische Unterstützung vorhanden ist.

162
Valloric

Es gibt auch clang_complete , das den clang -Compiler verwendet, um die Code-Vervollständigung für bereitzustellen C++ Projekte. Für dieses Plugin gibt es eine weitere Frage mit Tipps zur Fehlerbehebung .

Das Plugin scheint ziemlich gut zu funktionieren, solange das Projekt kompiliert wird, ist aber für große Projekte unerschwinglich langsam (da es versucht, die Tags-Liste vollständig zu kompilieren).

35
Konrad Rudolph

hier ist der Kommentar, den ich zuvor gegeben habe:

schau dir das an:

dieser Link sollte dir helfen, wenn du monodevelop auf einem MacOSX benutzen willst

Viel Glück und viel Spaß beim Programmieren.

7
Ric Tokyo

Ich habe gerade das Projekt gefunden Eclim verlinkt in eine andere Frage . Das sieht zumindest für die Java Integration recht vielversprechend aus.

5
Konrad Rudolph

Ich bin ein bisschen zu spät zur Party, aber autocomplpop könnte hilfreich sein.

3
romainl

ist das, wonach du suchst, so etwas wie Intellisense?

insevim scheint das Problem anzugehen.

link zu Screenshots hier

2
Ric Tokyo

Hat jemand code_complete erwähnt?

Aber Sie mochten keine ctags, daher ist dies wahrscheinlich nicht das, wonach Sie suchen ...

1
Johan