Wie lasse ich Vim die normale (Bash-ähnliche) Tab-Vervollständigung für Dateinamen durchführen?


289

Wenn ich eine neue Datei in Vim öffne und die Tab-Vervollständigung verwende, wird der gesamte Dateiname vervollständigt, anstatt die teilweise Übereinstimmung wie bei Bash durchzuführen. Gibt es eine Option, mit der diese Vervollständigung der Registerkarte "Dateiname" eher wie "Bash" funktioniert?


10
Technisch gesehen bin ich mir ziemlich sicher, dass "bash" keine Tab-Vervollständigung durchführt. Es ist Readline, die das macht.
Maxy-B

2
Wir sprechen über das Anpassen des Verhaltens der ^ X ^ F-Funktion?
BrunoJCM

Antworten:


413

Ich persönlich benutze

set wildmode=longest,list,full
set wildmenu

Wenn Sie den ersten Tabulator-Treffer eingeben, wird dieser so weit wie möglich abgeschlossen. Der zweite Tabulator-Treffer enthält eine Liste. Auf der dritten und den folgenden Registerkarten werden die Abschlussoptionen durchlaufen, sodass Sie die Datei ohne weitere Schlüssel vervollständigen können.

Bash-like wäre gerecht

set wildmode=longest,list 

aber das volle ist sehr praktisch.


1
Ich wünschte, dies wäre das Standardverhalten in vim. Ich dachte, es gab keine Möglichkeit, die Tabs vollständig zu vervollständigen, bis ich diesen Beitrag sah.
Neha Karanjkar

6
@NehaKaranjkar Ich empfehle, ein Dotfiles-Archiv zu pflegen, um die Bereitstellung in neuen Umgebungen zu
vereinfachen

2
Gibt es eine Möglichkeit, nur dann voll anzufangen, wenn nur wenige Ergebnisse vorliegen? so etwas wie set wildmode=longest,5full,list. Mit vielen Ergebnissen ist voll nutzlos, aber mit wenigen sehr praktisch. Es wird perfekt sein mit so etwas wie "Nur dann voll
anzeigen,

1
Früher funktionierte dies (gVim / ubuntu), jetzt jedoch nicht (macvim8.x / macOS). Siehe Beispiel . Irgendwelche Ideen?
Paschalis

1
Nachdem ich die Fertigstellung der Registerkarte "Ursprung" 2 Monate lang toleriert habe, muss es meiner Meinung nach eine Möglichkeit geben, sie zu vereinfachen. Danke dir.
Ramwin

23

Das Verhalten, das Bash am nächsten kommt, sollte sein

set wildmode=longest:full,full

Wenn Sie einige Zeichen eingeben, werden durch einmaliges Drücken der Tabulatortaste alle Übereinstimmungen angezeigt, die in verfügbar sind wildmenu . Dies unterscheidet sich von der Antwort von Michael, die ein Quickfix-ähnliches Fenster unter der Befehlszeile öffnet.

Dann können Sie den Rest der Zeichen weiter eingeben oder erneut die Tabulatortaste drücken, um die erste Übereinstimmung automatisch zu vervollständigen und sie zu umkreisen.


Ich glaube, ich bevorzuge diesen Weg.
Eddy Ekofo

8

Wenn Sie das Platzhaltermenü nicht festlegen möchten, können Sie jederzeit Ctrl+ drücken, Lwenn Sie eine Datei öffnen möchten. Ctrl+ Lvervollständigt den Dateinamen wie Bash-Vervollständigung.


Strg-L verhält sich nicht wie Bash Autocomplete. Es werden nicht alle möglichen Optionen durchlaufen.
Raine

2
Mein Bash verhält sich so. <Tab>Vervollständigt die aktuelle Zeichenfolge so weit wie möglich (wie CTRL-Lin Vim) und <Tab><Tab>zeigt eine Liste möglicher Übereinstimmungen (wie CTRL-Din Vim).
glitzert

8

Neben dem vorgeschlagenen Wildmodus / Wildmenü bietet Vim auch die Möglichkeit, alle möglichen Abschlüsse mit Ctrl+ anzuzeigen D. Dies kann für einige Benutzer hilfreich sein, die auf diese Frage stoßen, wenn sie wie ich in Vim nach verschiedenen Optionen für die automatische Vervollständigung suchen.


4

Ich gehe davon aus, dass Sie die automatische Vervollständigung in Vim über Ctrl+ verwenden N, um den aktuellen Puffer zu durchsuchen. Wenn Sie diesen Befehl verwenden, erhalten Sie eine Liste der Lösungen. Wiederholen Sie einfach den Befehl, um zum nächsten Element in der Liste zu gelangen. Gleiches gilt für alle Befehle zur automatischen Vervollständigung. Während sie das gesamte Wort ausfüllen, können Sie die Liste weiter durchlaufen, bis Sie zu der Liste gelangen, die Sie verwenden möchten.

Dies kann ein nützlicherer Befehl sein: Ctrl+ P. Der einzige Unterschied besteht darin, dass Ctrl+ Pim Puffer rückwärts sucht, während Ctrl+ Nvorwärts sucht ... Realistisch gesehen stellen beide eine Liste mit denselben Elementen bereit und erscheinen möglicherweise nur in einer anderen Reihenfolge.


0

Versuchen Sie es mit :set wildmenu . Abgesehen davon bin ich mir nicht sicher, was genau du versuchst.

Oh ja, und vielleicht versuchen Sie diesen Link: Link

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.