Gibt es ein Autocompletion-Plugin für vim? Welche Möglichkeiten habe ich hier?
Im Moment verwende ich AutoComplPop , aber es hat eine schlechte Integration mit snipMate, die ich verwende, und ist bei Ruby-Dateien (sogar <100 Zeilen) absolut langsam.
Ich habe ein paar andere Plugins gesehen, aber sie sind seit mindestens einem Jahr tot. Also irgendwelche Ideen?
vim
autocomplete
naquad
quelle
quelle
let g:acp_behaviorSnipmateLength=-1
siehe:help autocomplpop
), die Sie zu Ihrer .vimrc hinzufügen sollen. Haben Sie sie hinzugefügt?Antworten:
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
undDoctorJS
(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.
quelle
Hier ist eine schöne: YouCompleteMe
YouCompleteMe, bei dem das Dropdown-Menü während der Eingabe automatisch angezeigt wird und die unscharfe Auswahl unterstützt wird. Wenn Sie also eine Kennung aufgerufen haben
partition_finder
und etwasptf
eingeben, während Sie eine C ++ - Datei bearbeiten, enthält die Dropdown-Vorschlagsliste beideprintf
undpartition_finder
da sie dieselben Buchstaben enthalten in der gleichen Reihenfolge. Wenn Sie eine Variable namens habenmyBrain
, können Sie eingeben,brn
und dies wird darauf hindeuten. YouCompleteMe priorisiert die Vorschläge auch basierend auf der vorherigen Nutzungshäufigkeit.quelle
Ich benutze Neocomplcache mit den Snipmate + Snipmate Snippets
Sie können meine vimrc sehen
quelle
Ich probiere necomplecache mit neosnippet aus. Ich vermute, es wird eine bessere Integration haben, da beide von derselben Person verfasst wurden
quelle
Ich glaube, in vim ist OmniComplete integriert. Im Einfügemodus verwenden
ctrl+x,ctrl+o
.Andernfalls können Sie die Schlüsselwortvervollständigung im Einfügemodus mit ausführen
ctrl+n
. Wenn Sie es aufrufen, wird ein Dropdown-Menü angezeigt, in dem mögliche Übereinstimmungen von Wörtern angezeigt werden, die in der von Ihnen bearbeiteten Datei sowie in anderen geöffneten Dateien gefunden wurden. Schlagen Sie weiter,ctrl+n
um durch die Optionen zu blättern. Wenn Sie zu dem gewünschten Wort kommen, tippen Sie einfach wie gewohnt weiter.Wenn Sie das gewünschte Wort nicht finden können,
ctrl+n
wird es irgendwann von der Liste entfernt und Sie können weiter tippen, oder Sie können drückenESC
und dannbcw
zumb
Anfang des beleidigenden Wortes gehen undc
diew
Ord an das gewünschte ändern .quelle
<c-x><c-o>
nur für Dinge, denen vim ausdrücklich erklärt wurde, wie sie unterstützt werden sollen. Standardmäßig kann es meiner Meinung nach nur ein paar kleinere Dinge tun wie CSS-Vervollständigung, aber wenn Sie etwas wie Eclipse wollen, gibt es ein paar vim-Plugins, die versuchen, das für Sie bereitzustellen.partition_finder
und so etwas wieptf
beim Bearbeiten einer C ++ - Datei tippe, schlägt das Dropdown-Menü sowohlprintf
und vorpartition_finder
weil sie die gleichen Buchstaben in der gleichen Reihenfolge enthalten. Wenn ich eine Variable namens habemyBrain
, kann ich eingebenbrn
und es wird angezeigt. YouCompleteMe priorisiert die Vorschläge auch basierend auf der vorherigen Nutzungshäufigkeit. Überprüfen Sie es hier: valloric.github.io/YouCompleteMeIch habe ein neues Plugin SimpleAutoComplPop aus dem ursprünglichen AutoComplPop gegabelt. Obwohl ich mit Ruby oder snipMate nicht vertraut bin, können Sie es versuchen und ich freue mich über einige Rückmeldungen :)
quelle