Powiązane z częściowym uzupełnieniem tabulacji typu Bash dla nazw plików w Vimie
Jedną z naprawdę fantastycznych cech zsh
jest 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 :e
lub :cd
?
Istnieją inne przydatne funkcje związane ze ścieżką w zsh, takie jak cd foo bar
przejście do równoważnej ścieżki z foo
zastąpioną przez bar
(tzn. /blah/foo/baz/yada
Staje 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.
Odpowiedzi:
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:
: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/usr
i 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.: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.źródło
/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.**
jest strasznie powolny, ale działa dobrze w przypadku zwykłych projektów.:b
jest dla istniejącego otwartego bufora, dlatego używanie sesji pomaga.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.
źródło