Uzupełnianie tabulacji częściowych ścieżek typu Zsh

11

Powiązane z częściowym uzupełnieniem tabulacji typu Bash dla nazw plików w Vimie

Jedną z naprawdę fantastycznych cech zshjest to, że możesz pisać, na przykład ls /u/s/m/m/who.1, naciskać Tabi mieć gotowe ls /usr/share/man/man1/who.1.gz. Kiedy już się przyzwyczaisz, powrót do niego jest naprawdę denerwujący /u<tab>/s<tab>/m<tab>/m<tab>..., szczególnie gdy cała ścieżka częściowa może rozwiązać tylko jedną rzeczywistą ścieżkę, ale każdy pojedynczy komponent może mieć wiele ukończeń. Czy można to osiągnąć w Vimie, na przykład podczas używania :elub :cd?

Istnieją inne przydatne funkcje związane ze ścieżką w zsh, takie jak cd foo barprzejście do równoważnej ścieżki z foozastąpioną przez bar(tzn. /blah/foo/baz/yadaStaje się /blah/bar/baz/yada). Jeśli istnieje rozwiązanie, które również je wprowadza (w zasadzie przekazywanie zadań związanych z powłoką do powłoki, która wykonuje je bardzo dobrze), byłoby świetnie.

muru
źródło
1
Nie jestem świadomy niczego, co osiąga dokładnie to, o co prosisz, ale istnieją różne wyszukiwarki plików rozmytych, które pozwalają otwierać pliki w podobny sposób. Preferuję CtrlP, ale jest też Command-T i jestem pewien, że są też inne, o których nie pamiętam.
Bogaty
1
@Rich Dopóki nie będę musiał zacierać Tabu kilkanaście razy, byłbym szczęśliwy.
muru
Istnieje już podobne pytanie na SO.
romainl

Odpowiedzi:

6

Wcześniej używałem CtrlP i innych powiązanych wtyczek, dopóki naprawdę nie odkryłem natywnych mocy vima. Pozwól, że wyjaśnię kilka sposobów na zrobienie tego bez potrzeby używania zewnętrznej wtyczki:

  1. :e, fajną rzeczą jest: e możesz zrobić coś takiego, :e /u*/s*/m*/m*/<Tab>a vim automatycznie to rozwinie :e /usr/share/man/man. Jest to o wiele krótsze i proste niż to, co opublikowałeś, ale jeszcze lepszym sposobem jest zrobienie :e /usr/**/man<Tab>tego. Spojrzy rekurencyjnie pod /usri wyświetli wszystkie pasujące ścieżki. Może to zająć trochę czasu, w zależności od tego, jak duży jest zestaw, ale w projekt ten działa cuda, ponieważ możesz zrobić coś takiego :e ap**/jav**/user<Tab>i ukończy wszystkie niekompletne ścieżki i da ci listę pasujących ścieżek i działa super świetnie.
  2. :b, Aby otworzyć istniejące bufory. Jest to naprawdę potężne, ponieważ domyślnie przyjmuje częściowe, więc możesz po prostu zrobić coś podobnego :b usr*man<Tab>i uzupełni nazwę pliku, jeśli został już załadowany na listę buforów. Jest to szczególnie dobre, ponieważ jest prawie natychmiastowe i bardzo szybkie. Również intensywnie używam sesji vima, przy pomocy tpope / vim- obsession i dhruvasagar / vim-prosession , który utrzymuje wszystkie pliki, które otwieram na liście buforów i są one dostępne, nawet jeśli istnieją vim i wracają do niego z katalog projektu.
Dhruva Sagar
źródło
1
/u*/s*/m*/m*/<Tab>tak właśnie pracowałem przy bashu. Nie zastępuje zsh o milę. /usr/**/man<Tab>jest strasznie powolny, gdy cały system plików jest otwarty, ale może być przydatny w małych projektach. Chyba że źle zrozumiem :b, nie służy do otwierania nowych plików.
muru
@muru masz rację, to nie jest substytutem dla zsh, ale wciąż jest lepsze niż samodzielne wpisywanie całego tekstu, chodzi o ułatwienie, **jest strasznie powolny, ale działa dobrze w przypadku zwykłych projektów. :bjest dla istniejącego otwartego bufora, dlatego używanie sesji pomaga.
Dhruva Sagar,
5

vim-zsh-path- complete rzekomo robi dokładnie to, o co prosisz (przynajmniej pierwsza część), ale nigdy tego nie próbowałem. (Nawet o nim nie słyszałem, dopóki romainl nie powiązał go z odpowiedzią SO autora , chociaż dokumentacja zawiera także kilka ograniczeń.

Oprócz tego istnieją różne wyszukiwarki plików rozmytych, które osiągają coś podobnego do otwierania plików.

Moja ulubiona wtyczka to CtrlP . Gdy jest używany do otwierania plików, wyszukuje wszystkie pliki, których pełne ścieżki zawierają znaki, które wpisujesz we właściwej kolejności - nie musisz wpisywać części każdego elementu ścieżki (i wszystkich separatorów ścieżek) masz w twoim przykładzie, ale działa idealnie, jeśli tak. Używa również tego samego interfejsu do otwierania ostatnio używanych plików i obecnie otwartych buforów, a także więcej.

Domyślnie mapuje <c-p>w trybie normalnym, aby otworzyć monit CtrlP. Monit wyświetla listę plików, która jest zawężana podczas wpisywania znaków. Możesz nacisnąć Enterw dowolnym momencie, aby otworzyć aktualnie wybrany plik, lub użyć <c-k>i, <c-j>aby przesunąć zaznaczenie w górę lub w dół na liście aktualnie dopasowanych plików.

Inną popularną alternatywą jest Command-T , ale wolę CtrlP, ponieważ jest on zaimplementowany w VimScript; Command-T ma składnik Ruby.

Bogaty
źródło