Gibt es Autocompletion-Plugins für vim?

10

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?

naquad
quelle
ACP funktioniert hier sehr sehr gut und ich habe kein Problem mit SnipMate. Es gibt eine Einstellung ( let g:acp_behaviorSnipmateLength=-1siehe :help autocomplpop), die Sie zu Ihrer .vimrc hinzufügen sollen. Haben Sie sie hinzugefügt?
Romainl

Antworten:

14

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 &omnifuncin 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 .vimrcSetup und NeoSnippet für die Vervollständigung von Snippets.

  • Eine Monsterkombination aus exuberant-ctagsund 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.

Andy Ray
quelle
6

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_finderund etwas ptfeingeben, während Sie eine C ++ - Datei bearbeiten, enthält die Dropdown-Vorschlagsliste beide printfund partition_finderda sie dieselben Buchstaben enthalten in der gleichen Reihenfolge. Wenn Sie eine Variable namens haben myBrain, können Sie eingeben, brnund dies wird darauf hindeuten. YouCompleteMe priorisiert die Vorschläge auch basierend auf der vorherigen Nutzungshäufigkeit.

trusktr
quelle
2

Ich benutze Neocomplcache mit den Snipmate + Snipmate Snippets

let g:neocomplcache_snippets_dir='~/.vim/bundle/snipmate-snippets/snippets'

Sie können meine vimrc sehen

Juan Pablo
quelle
2

Ich probiere necomplecache mit neosnippet aus. Ich vermute, es wird eine bessere Integration haben, da beide von derselben Person verfasst wurden

Vordenker
quelle
1

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+num 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+nwird es irgendwann von der Liste entfernt und Sie können weiter tippen, oder Sie können drücken ESCund dann bcwzum bAnfang des beleidigenden Wortes gehen und cdie wOrd an das gewünschte ändern .

Conrad.Dean
quelle
Vims eingebauter scheint zu saugen. Immer wenn ich <cx> <co> drücke, wird nur "Muster nicht gefunden" angezeigt. Wenn ich jedoch <cn> drücke, werden Vervollständigungen in einer Dropdown-Liste direkt unter dem eingegebenen Wort angezeigt. Ist das das gleiche? Gibt es eine Möglichkeit, das Dropdown-Menü für die automatische Vervollständigung automatisch anzuzeigen, ohne eine Verknüpfung drücken zu müssen?
trusktr
Mir ist kein Plugin bekannt, mit dem die automatische Vervollständigung ohne Interaktion angezeigt wird. Entschuldigung :(. Funktioniert <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.
Conrad.Dean
1
Ich habe ein Plugin für vim namens YouCompleteMe gefunden, das das Dropdown-Menü automatisch während der Eingabe anzeigt und die Fuzzy-Auswahl unterstützt. Wenn ich also einen Bezeichner habe partition_finderund so etwas wie ptfbeim Bearbeiten einer C ++ - Datei tippe, schlägt das Dropdown-Menü sowohl printfund vor partition_finderweil sie die gleichen Buchstaben in der gleichen Reihenfolge enthalten. Wenn ich eine Variable namens habe myBrain, kann ich eingeben brnund es wird angezeigt. YouCompleteMe priorisiert die Vorschläge auch basierend auf der vorherigen Nutzungshäufigkeit. Überprüfen Sie es hier: valloric.github.io/YouCompleteMe
trusktr
1

Ich 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 :)

rox
quelle