Dies ist eine alte Frage, aber ich komme immer wieder mit einem Schimmer verblassender Hoffnung darauf zurück und denke, dass ich eines Tages die richtige Kombination von Plugins finden werde, um mir eine perfekte Autovervollständigung in Vim zu ermöglichen. Die Suche geht weiter, aber das ist alles, was ich über mehrere Jahre recherchiert habe.
Zunächst müssen Sie verstehen, dass Vim ein Texteditor und kein Code-Editor ist. Code-Editoren, IDES, sind Tools wie die Jetbrains-Toolsuite, Visual Studio Code, Eclipse usw.
Vim kann Code grundsätzlich nicht genau "automatisch vervollständigen". Für die automatische Vervollständigung müssen Sie Ihren Quellcode überprüfen und den AST analysieren. Bedenken Sie, dass Vim bis zur Veröffentlichung von Vim 8 im Jahr 2016 keine asynchronen Vorgänge ausführen konnte. Der Versuch, eine Code-Introspektionssoftware in einem Vim-Plugin auszuführen, wäre daher ein Albtraum. Es ist in die Geschichte des Vim-Ökosystems eingebrannt, dies nicht zu tun. Und alle, die dies versuchen, wie Tern For Vim, sind in der Tat Albträume.
Das Beste, was ein Texteditor tun kann, sind Ausschnitte und das Vervollständigen derselben Wörter / Zeilen / usw., die er kennt. Wenn Sie Code automatisch vervollständigen möchten, sollten Sie einen Code-Editor verwenden, keinen Texteditor.
Dies sind Ihre Optionen, von denen ich alle ausprobiert habe:
Zwei nützliche Tastaturkürzel sind Ctrl- n- die ein Wort automatisch basierend auf den aktuell geöffneten Puffern vervollständigen (keine Code-Introspektion) und Ctrl- xCtrl- leine vollständige Codezeile automatisch vervollständigen, wenn Sie einen duplizieren möchten. Sie wissen wahrscheinlich Ctrl- xCtrl- f, wodurch ein Dateiname einschließlich des Pfads relativ zum aktuellen automatisch vervollständigt wird :pwd
. Das Pattern- Complete - Plugin kann leicht nützlich sein, wenn Sie nicht mit suchen /\v
.
Eingebaute Vim " Omnicompletion ", ausgelöst durch Ctrl- x, Ctrl- o(das möchten Vim-Autoren jedes Mal eingeben ) zusammen mit einer Reihe sprachspezifischer Plugins, falls vorhanden. Sie können :echo &omnifunc
in einer Datei nachsehen, ob Omnicompletion bereits von Vim in der Datei Ihrer Wahl eingerichtet wurde.
AutoComplPop zum automatischen Öffnen des obigen Omnicompletion-Menüs beim Tippen.
SuperTab, mit dem Sie drücken können Tab, um die integrierte Fertigstellung von Vim auszulösen.
NeoComplCache, bei dem es sich um die Vervollständigung von Schlüsselwörtern handelt (es unterscheidet sich nicht von der integrierten Vervollständigung von Vim), ein komplexes .vimrc
Setup und NeoSnippet für die Vervollständigung von Snippets.
Eine Monsterkombination aus exuberant-ctags
und DoctorJS
(ein Mozilla-Projekt, das seit einem Jahr tot ist), TagBar und einem selbstgebauten Ding , um die Fertigstellung aus den Tag-Dateien zu extrahieren.
SnipMate , ein grundlegendes Plugin zur Vervollständigung von Tags, zusammen mit Snippets , und Sie können selbst herausfinden, wie Sie Snippets hinzufügen, da dies etwas schwierig ist.
UltiSnips zusammen mit UltiSnips-Schnipsel , die verschieden als die oben Schnipsel.
Tern for Vim , eine vielversprechende Bibliothek, die die eigentliche Code-Introspektion durchführt, um eine korrekte automatische Vervollständigung zu erzielen. Es ist jedoch fehlerhaft, sehr langsam, hat Speicherlecks, die Vim zum Absturz bringen, und ist möglicherweise Abbruchware.
YouCompleteMe , eine unscharfe Vervollständigung während der Eingabe , bei der ein Server im Hintergrund ausgeführt wird, sowie eine eigens entwickelte Funktion zur Vervollständigung von Snippets.
Eclim - ein nobler Versuch, einen Eclipse-Server im Hintergrund auszuführen und Vim die Autocompletions mitzuteilen, die er im laufenden Betrieb überprüft . Es funktioniert ungefähr so gut wie Tern.
Schließlich Closetag oder delimitMate oder Autoclose oder ein selbst entwickeltes Bananagramm zum automatischen Schließen von Tags und Klammern beim Tippen automatisch.
Fast jedes Plugin in dieser Liste steht in Konflikt mit fast jedem anderen Plugin in dieser Liste.
YouCompleteMe scheint der Anführer des Pakets zu sein , aber ich habe es nie geschafft, es mit Tag-Vervollständigung richtig zum Laufen zu bringen, und seine Code-Introspection-Vervollständigung hat sich noch nicht als mächtig erwiesen.
Meine persönliche Meinung ist, dass der aktuelle Zustand der Welt der Vim-Autovervollständigung in einem schlechten Zustand ist. Für kleine Projekte können Sie eine der oben genannten Lösungen verwenden. Wenn Sie es mit einer einfachen API zu tun haben, die Sie meistens im Kopf behalten können, ist die Vervollständigung ohne Code-Introspektion wahrscheinlich in Ordnung. Wenn Sie sich mit einem großen Projekt befassen oder beim Programmieren den Vorteil der Typensicherheit benötigen, ist eine vollwertige IDE ( Eclipse , Visual Studio , WebStorm ) viel besser für Sie geeignet als Vim.
Der Nachteil einer IDE ist natürlich, dass Sie nicht mehr die Kraft von Vim zur Hand haben. Ich habe keine einzige IDE verwendet, die einen akzeptablen Vim-Modus hat.
Vim hat eine moderate sprachliche Neigung zu untypisierten C-ähnlichen Sprachen und erwartet ansonsten, dass alle sprachspezifischen Funktionen von Benutzern als Plugins hinzugefügt werden. Leider hat dies zu einem zersplitterten Autocompletion-Ökosystem geführt. Einige Optionen sind anständig, aber nichts ist perfekt, und es gibt selten einen Mehrheitsführer / eine bewährte Methode.
let g:acp_behaviorSnipmateLength=-1
siehe:help autocomplpop
), die Sie zu Ihrer .vimrc hinzufügen sollen. Haben Sie sie hinzugefügt?