Zsh-ähnliche Tab-Vervollständigung von Teilpfaden


11

Bezogen auf Bash-like partielle Tab-Complete für Dateinamen in Vim

Eine der wirklich fantastischen Funktionen von zshist, dass Sie beispielsweise tippen ls /u/s/m/m/who.1, drücken Tabund vervollständigen können ls /usr/share/man/man1/who.1.gz. Wenn Sie sich erst einmal daran gewöhnt haben, ist es sehr ärgerlich, zurück zu gehen /u<tab>/s<tab>/m<tab>/m<tab>..., insbesondere wenn der gesamte Teilpfad nur in einen tatsächlichen Pfad aufgelöst werden kann, aber jede einzelne Komponente möglicherweise mehrere Vervollständigungen aufweist. Kann dies in Vim beispielsweise bei Verwendung von :eoder erreicht werden :cd?

Es gibt andere nützliche pfadbezogene Funktionen in zsh, z. B. die Verwendung cd foo barzum Verschieben zu einem äquivalenten Pfad, der foodurch bar(dh /blah/foo/baz/yadawird /blah/bar/baz/yada) ersetzt wird . Wenn es eine Lösung gibt, die auch diese einbringt (im Wesentlichen Shell-bezogene Aufgaben an eine Shell zu übergeben, die diese sehr gut erledigt), wäre es großartig.


1
Mir ist nichts bekannt, das genau das erreicht, was Sie verlangen, aber es gibt verschiedene Fuzzy-File-Finder, mit denen Sie Dateien auf ähnliche Weise öffnen können. Ich bevorzuge CtrlP, aber es gibt auch Command-T und ich bin sicher, dass es andere gibt, deren Namen ich vergesse.
Rich

1
@Rich Solange ich Tab nicht ein Dutzend Mal zerdrücken muss, würde ich mich freuen.
Muru

Es gibt bereits eine ähnliche Frage zu SO.
Romainl

Antworten:


6

Ich habe CtrlP und andere verwandte Plugins viel früher verwendet, bis ich die nativen Fähigkeiten von vim wirklich entdeckt habe. Lassen Sie mich einige Möglichkeiten erklären, ohne ein externes Plugin zu benötigen:

  1. :e, das Schöne an: e ist, dass du so etwas machen kannst :e /u*/s*/m*/m*/<Tab>und vim wird das automatisch für dich erweitern :e /usr/share/man/man. Das ist viel kürzer und einfacher als das, was Sie gepostet haben, aber ein noch besserer Weg ist es :e /usr/**/man<Tab>, es wird rekursiv unter angezeigt /usrund listet alle übereinstimmenden Pfade auf. Dies kann jedoch einige Zeit dauern, abhängig davon, wie groß das Set ist, aber in a Projekt dies wirkt Wunder, weil Sie so etwas tun können :e ap**/jav**/user<Tab>und es alle unvollständigen Pfade vervollständigt und Ihnen eine Liste von übereinstimmenden Pfaden gibt und super gut funktioniert.
  2. :b, Um vorhandene Puffer zu öffnen. Dies ist sehr leistungsfähig, da standardmäßig Teiltöne akzeptiert werden, sodass Sie einfach so etwas tun können, :b usr*man<Tab>und der Dateiname vervollständigt wird, wenn er bereits in die Pufferliste geladen wurde. Dies ist besonders gut, weil es fast augenblicklich und sehr schnell ist. Außerdem verwende ich VIM-Sitzungen häufig mit Hilfe von tpope / vim-obsession und dhruvasagar / vim-prosession , wodurch alle von mir geöffneten Dateien in der Pufferliste gespeichert bleiben und auch dann verfügbar sind, wenn ich vim existiere und von dort zurückkomme Projektverzeichnis.

1
/u*/s*/m*/m*/<Tab>So habe ich Bash umgangen. Es ist kein Ersatz für zsh um eine Meile. /usr/**/man<Tab>ist schrecklich langsam, wenn Sie das gesamte Dateisystem geöffnet haben, kann aber für kleine Projekte nützlich sein. Wenn ich :bes nicht falsch verstehe , dient es nicht zum Öffnen neuer Dateien.
Muru

@muru du hast recht, es ist kein Ersatz für zsh, aber es ist immer noch besser als das Ganze selbst tippen zu müssen, es geht darum, es einfacher zu machen, **ist in der Tat schrecklich langsam, funktioniert aber gut für reguläre Projekte. :bist für vorhandenen offenen Puffer, deshalb hilft die Verwendung von Sitzungen.
Dhruva Sagar

5

vim-zsh-path-vervollständigung gibt vor, genau das zu tun, wonach Sie fragen (zumindest der erste Teil), aber ich habe es nie versucht. (Ich hatte noch nicht einmal davon gehört, bis Romainl mit einer SO-Antwort des Autors verknüpft war , obwohl in der Dokumentation auch einige Einschränkungen erwähnt werden.

Darüber hinaus gibt es verschiedene Fuzzy-File-Finder, die beim Öffnen von Dateien etwas Ähnliches erreichen.

Mein bevorzugtes Plugin dafür ist CtrlP . Wenn zum Öffnen von Dateien verwendet, ist es für alle Dateien , deren vollständige Pfade sucht die Zeichen , dass Sie in der richtigen Typ auftrags Sie nicht haben , um in Teilen jeder Komponente des Pfades zu geben (und alle den Weg Separatoren) , wie Sie haben in Ihrem Beispiel, aber es funktioniert perfekt, wenn Sie dies tun. Dieselbe Schnittstelle wird auch zum Öffnen kürzlich verwendeter Dateien und aktuell geöffneter Puffer und mehr verwendet.

Standardmäßig wird <c-p>im normalen Modus die CtrlP-Eingabeaufforderung geöffnet. Die Eingabeaufforderung zeigt eine Liste von Dateien an, die beim Eingeben von Zeichen eingegrenzt wird. Sie können Enterjederzeit drücken , um die aktuell ausgewählte Datei zu öffnen, oder die Auswahl verwenden <c-k>und <c-j>nach oben und unten durch die Liste der aktuell übereinstimmenden Dateien verschieben.

Eine andere beliebte Alternative ist Command-T , aber ich bevorzuge CtrlP, weil es in VimScript implementiert ist. Command-T hat eine Ruby-Komponente.

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.