2013-03-23 4 views
17

In Zsh, kann ich Dateinamensvervollständigung mit Schrägstrichen verwenden, um eine Datei tief in meinem Quellbaum anzusprechen. Wenn ich zum Beispiel ein:Wie man Dateipfade in Vim automatisch vervollständigt, genau wie in zsh?

vim s/w/t/u/f >TAB< 

zsh ersetzt die Muster mit:

vim src/wp-contents/themes/us/functions.php 

Was würde Ich mag in der Lage sein, Dateien auf die gleiche Weise an der Vim Befehlszeile zum Ziel, so dass die Typisierung

:vi s/w/t/u/f >TAB< 

wird automatisch vervollständigt zu:

:vi src/wp-contents/themes/us/functions.php 

Ich versuche, die Vim-Dokumente für den Wild-Modus zu parsen, aber ich sehe nicht, welche Einstellungen mir das geben würden. Es macht Autovervollständigung für einzelne Dateinamen, aber nicht für Dateipfade. Unterstützt Vim dies nativ? Oder wie kann ich den Autocomplete-Algorithmus für Dateien anpassen?

Danke für jede Beratung! -mykle-

+0

Ich hatte diese Frage falsch beantwortet, weil ich die Frage falsch gelesen hatte. Ich weiß nicht, wie ich das in Vim machen soll. Es ist definitiv nicht mit irgendeiner Vim-Option allein möglich, und nichts in Bezug auf 'Wildmode' wird helfen. Es ist möglich, mit einem Plugin zu implementieren. Ich weiß nicht, ob es einen gibt. Ich will das jetzt plötzlich, dass du es angesprochen hast, also wenn ich kein Plugin finde, werde ich eins schreiben. –

Antwort

8

Ich konnte kein Plugin dafür finden, also schrieb ich eins. Es heißt vim-zsh-path-completion. Es tut, was Sie suchen, obwohl über <C-s> eher als <Tab>. Sie können es mit <Tab> für noch mehr Kontrolle über was übereinstimmt, verwenden.

Es hat Bugs, aber für grundlegende Pfade ohne Leerzeichen/Sonderzeichen sollte es funktionieren. Ich denke, es ist nützlich genug in seinem aktuellen Zustand, um hilfreich zu sein. Ich hoffe, die Bugs zu beseitigen und den Code aufzuräumen, aber ich dachte mir, ich würde jetzt anfangen, Feedback zu erbitten.

Danke für die Idee!

Ursprüngliche (falsche) Antwort, aber mit ein paar nützlichen Informationen über Vim's Wildmodus.

Setzen Sie folgendes in .vimrc:

set wildmenu 
set wildmode=list:longest 

, die zu den längsten einzigartigen Spiel auf <Tab>, einschließlich Anhängen eines / und absteigend in Verzeichnisse gegebenenfalls vervollständigt. Wenn mehrere Übereinstimmungen vorhanden sind, wird eine Liste mit Übereinstimmungen für das angezeigt, was Sie bisher eingegeben haben. Dann können Sie weitere Zeichen und <Tab> erneut eingeben, um abzuschließen.

ziehe ich die folgende Einstellung, die auf <Tab> zur ersten einzigartigen Spiel abgeschlossen ist, und dann ein Menü erscheint, wenn Sie <Tab> wieder treffen, die Sie mit den Pfeiltasten navigieren und drücken Sie die Eingabetaste zur Auswahl:

set wildmode=list:longest,list:full 

Auschecken :help wildmenu und :help wildmode. Sie können auch wildignore auf eine Liste von Mustern festlegen, die beim Abschluss ignoriert werden sollen. Ich habe meine als:

set wildignore=.git,*.swp,*/tmp/* 
+0

erhägerd! wie rad ist das? Vielen Dank! –

+0

Ich versuche immer noch, es funktioniert zu bekommen ... es ist in meinem: Skriptnamen aufgeführt, aber ich bekomme keine Aktion mit Strg-S. Scheint etwas mit Gvim zu machen, aber nicht mit einfachem alten Vim. Gibt es spezielle vim-Version Anforderungen? –

+0

Es ist in einem Zustand des Flusses, sorry. Es funktionierte meistens, als ich das zum ersten Mal veröffentlichte, aber es war eine vorzeitige Behauptung. Ich arbeite die Bugs aus und teste es jetzt. Überprüfen Sie in ein paar Tagen auf GitHub, und fühlen Sie sich frei, dort Fehler zu archivieren. Ich werde einen weiteren Kommentar hier posten, wenn ich sicher bin, dass es eine stabile Version gibt, aber dies ist nicht das richtige Forum für Status-Updates. –

5

Vim hat keine solche Funktion standardmäßig. Das am nächsten liegende Build-in Feature ist die Wildmenu/Wildmode-Kombination, aber es ist immer noch sehr unterschiedlich.

A quick look at the script section of vim.org gab nichts zurück, aber ich sah nicht zu weit: Sie sollten weiter graben. Vielleicht ist es irgendwo da.

Haben Sie Command-T, LustyExplorer, FuzzyFinder, CtrlP oder eines der vielen ähnlichen Plugins probiert?

Ich verwende CtrlP und Fuzzy-Abgleich kann auf Dateipfad oder Dateiname erfolgen. Wenn auf Filepath getan, kann ich die Tastenfolge unten verwenden zu öffnen src/wp-contents/themes/us/functions.php (vorausgesetzt functions.php die einzige Datei unter us ist, die mit einem f beginnt):

,f " my custom mapping for the :CtrlP command 
swtuf<CR> 

bearbeiten

über ein in das Denken mögliche Lösung Ich fürchte, ich war etwas kurzsichtig. Ich habe mich auf Ihre genauen Anforderungen konzentriert, aber Vim hat coole Tricks, wenn es darum geht, Dateien zu öffnen!

Der :e[dit] Befehl akzeptiert zwei Arten von Wildcards: * ist wie die * Sie in der Shell verwenden würden und ** bedeuten „jedes Unterverzeichnis“.

es ist also durchaus möglich, zu tun:

:e s*/w*/t*/u*/f*<Tab> 

oder so etwas wie:

:e **/us/f<Tab> 

oder sogar:

:e **/fun<Tab> 

In Kombination mit den wildmode Einstellungen in Jims Antwort, ich glaube, Sie haben hier ein ziemlich leistungsfähiges Werkzeug zur Datei-Navigation.

+0

CtrlP ist gute Sachen. Ich frage mich, ob es eine einfache Möglichkeit gibt, sich in der Befehlszeile einzuklinken. –

+0

Ich stimme natürlich zu. Meinst du "benutze eine Funktion von CtrlP, um Kommandozeile zu vervollständigen"? – romainl

+1

Ich löschte meine Antwort tatsächlich, weil ich die Frage falsch gelesen hatte. Aber dann ging ich und schrieb ein eigenständiges Plugin, um es zu tun. Siehe meine neue Antwort für Details. Ich habe die 'wildmode' Kommentare in die neue Antwort für eine andere Option eingefügt. –

Verwandte Themen