Ist es möglich, dass vim Funktionsnamen, Variablen usw. automatisch vervollständigt, wenn es zum Programmieren verwendet wird?

56

Viele IDEs vervollständigen automatisch Funktionsnamen, Variablen, Methodennamen usw. als Benutzertypen. Die besten vervollständigen die Namen, die sowohl auf der eingebauten Bibliothek der Sprache als auch auf dem basieren, was bereits in anderen Dateien des gleichen Programms definiert wurde.

Während ich zum Beispiel das folgende Python-Programm tippe:

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

Die Zeile wird eatFautomatisch eatFood()als verfügbare automatische Vervollständigungsoption angezeigt.

Hat Vim diese Fähigkeit? Wenn ja, wie kann ich es aktivieren?

drs
quelle

Antworten:

42

Es gibt viele verschiedene Arten von Autocomplete in vim. Eine Möglichkeit könnte die Verwendung von SuperTab sein . Dies bietet die Möglichkeit, die Tabulatorvervollständigung mehr oder weniger zu jeder Zeit zu verwenden. Dies würde es Ihnen ermöglichen, zu drücken, Tabnachdem Sie das Wort teilweise eingetippt haben, um eine Vervollständigungsliste zu erhalten. Geben Sie zum Beispiel Folgendes eatFein, um Tabzu erweiterneatFood.

Bitte beachten Sie : Diese Bilder verlinken alle auf Beispiel-Gifs in Aktion.

Supertab-Vervollständigungen

Vim hat ausgezeichnete andere Möglichkeiten. Sie sollten lesen :h ins-completion, um die Vielzahl der eingebauten Vervollständigungsoptionen zu sehen. Die Verwendung von vims Ctrl- XCtrl- Oin Kombination mit einem Python-fähigen Plugin wie jedi kann einen Vervollständigungsgeschmack ergeben. Jedi kann so konfiguriert werden, dass Dokumentation zur Omni-Vervollständigung angezeigt wird (dies ist, was Ctrl- XCtrl- Otut). Dann wird die Dokumentation für die Abschlusskandidaten in einem geteilten Fenster angezeigt.

ctrlxctrlo Vervollständigung

Die Verwendung ähnlicher Plugins, aber unterschiedlicher Optionen, führt zu unterschiedlichsten Verhaltensweisen. Es ist zum Beispiel möglich, dass Sie nicht zur automatischen Vervollständigung auffordern müssen (wenn Sie danach suchen). Stattdessen kann ein Plug-in nach der Eingabe einer bestimmten Anzahl von Buchstaben (z. B. 2 oder 3) eines Wortes versuchen, mögliche Vervollständigungen in einem Menü auf intelligente Weise anzubieten.

Bildbeschreibung hier eingeben

Die kurze Antwort lautet also ja! Der Konfigurationsprozess kann jedoch etwas kompliziert sein. Ich betrachte es als einen Schritt auf der langen Treppe, um Vim zu meistern.

Davidlowryduda
quelle
Ich habe sie alle ausprobiert und komme immer wieder auf SuperTab zurück, es ist das am wenigsten aufdringliche.
Craigp
1
Das YouCompleteMe-Plugin gefällt mir auch sehr gut, da es vorschlägt, dass Sie während der Eingabe Vorschläge auswählen oder ignorieren können. Ja, visuell ist es schwer zu ignorieren, aber es ist sehr unauffällig in meinem Workflow, da weniger Tastenanschläge erforderlich sind.
Thriveth
3
Ich habe die Animationen so geändert, dass sie "auf Klick" sind, in dem Sinne, dass sie mit den GIF-Animationen verknüpft sind.
Davidlowryduda
1
Ich kann YouCompleteMe nicht auf meinem Arbeitscomputer verwenden, da ich kein Root-Programm zum Installieren der Abhängigkeiten habe. SuperTab ist bei weitem die nächstbeste Wahl.
Charles Clayton
@mixedmath In meinem Fall funktioniert superTab nicht.
Alhelal
24

Diese Funktionalität, dh das Durchsuchen der aktuellen Datei (und aller geöffneten Dateien) nach automatischer Vervollständigung, sollte standardmäßig aktiviert sein mit Ctrl+P:

Screenshot der verwendeten automatischen Vervollständigung

Sie können zum gehen n mit ext Vorschlag Ctrl+N, der p mit revious Vorschlag Ctrl+Pund wählen Sie diese durch einen beliebigen Buchstaben eingeben (die direkt nach dem Vorschlag angehängt wird).

yo '
quelle
1
An den Redakteur (Jasper): Ich möchte mit größerer Wahrscheinlichkeit wieder etwas schreiben, das ich kürzlich geschrieben habe, nicht etwas, das ich in Zukunft schreiben werde oder das am Anfang der Datei steht. Deshalb ^Pist IMHO natürlicher. Ansonsten danke für die Bearbeitung (ich hoffe ich habe auf den richtigen Button geklickt und du hast deine +2 bekommen).
yo‘
1
Ja, ich habe diese imaginären Internet-Punkte bekommen :) Ich dachte immer, dass die Vorschlagsliste alphabetisch sortiert sein würde ...
Jasper
@Jasper Reihenfolge des Auftretens ist es (zumindest für mich sicher, siehe auch oben: world,word,woodund nicht umgekehrt). Das ^Pist auch die letzte verwendete Vervollständigung, was sehr praktisch ist (ich gehe selten weiter als 3 Elemente in der Liste, selbst in einer langen Datei).
Du
protip:inoremap <C-Space> <C-N>
wchargin
20

Vim hat Unterstützung für die native Vervollständigung. Sie können sich über die verschiedenen Abschlüsse informieren, die Vim unterstützt :h ins-completion.

Im Allgemeinen genügen für alle Zwecke, die ich festgestellt habe, Ins-Vervollständigungen für meinen Geschmack, es gibt jedoch einige Plugins für die Vervollständigung, die einen Mehrwert bieten, der über das hinausgeht, was Ins-Vervollständigungen bieten. NeoComplete , YCM (YouCompleteMe) sind einige davon. Sie sind fortschrittlicher in dem Sinne, dass sie versuchen, verschiedene Arten von Vervollständigungen genauer zu kombinieren, und sie verfügen auch über fortschrittliche Caching-Mechanismen, sodass sie in der Regel schneller sind. YCM arbeitet sogar mit externen Compilern / Dienstprogrammen zusammen, um IntelliSense zu verbessern.

Dhruva Sagar
quelle
9

Ja, es gibt automatische Vervollständigungsskripte für vim. Die "beste" Wahl hängt von Ihrer Programmiersprache ab. Da Ihr Beispielcode Python ist, schlage ich vor, sich Jedi anzuschauen . Darauf aufbauend vervollständigst du mich existierend, was auch Unterstützung für andere Sprachen hat, aber manchmal als zu groß angesehen wird. Für andere Sprachen können Sie die ausführlichen vim-Skripte durchsuchen .

johannes
quelle
7

Geben Sie im Einfügemodus die ersten Zeichen eines Wortes ein und drücken Sie dann:

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

Dies ist besonders nützlich, wenn Sie die Namen von Variablen in ein Programm eingeben.

Die Option "Vervollständigen" steuert, wo nach Schlüsselwörtern gesucht wird (einschließlich Dateien, Tag-Dateien, Puffern und mehr).

Die Option 'completeopt' steuert, wie der Abschluss erfolgt (z. B. ob ein Menü angezeigt wird).

surendra nath
quelle