W zsh
The cd
polecenie ma postać dwóch argumentów: cd OLD NEW
zmienia się ${PWD/OLD/NEW}
. Z systemem uzupełniania w nowym stylu, zsh jest w stanie NEW
wykonać: drugi argument jest uzupełniany na podstawie tego, co OLD
można zastąpić, aby uzyskać istniejący katalog. Ale pierwszy argument został uzupełniony tylko do istniejących katalogów.
Jak mogę zmusić Zsh do oferowania uzupełnień o możliwych wartościach OLD
, oprócz uzupełniania istniejących katalogów?
Na przykład, jeśli bieżący katalog jest /path/to/foo
i tam są również katalogi /also/to/foo
i /path/to/foo/prime
, następnie cd p
Tabuzupełnia p
się prime
. Jeśli mam zamiar uruchomić cd path also
, chciałbym, aby zsh również zaoferował path
jako uzupełnienie. W jaki sposób?
Używanie już wpisanych wartości drugiego argumentu w celu ograniczenia możliwości pierwszego argumentu byłoby plusem, ale uzupełnienie pierwszego argumentu niezależnie również byłoby dobrze.
źródło
cd p also <Tab>
lubcd p also <left arrow x 5> <Tab>
?cd p also<Left*5><Tab>
: jeśli nacisnę,<Tab>
gdy kursor jest w środkualso
, oczekuję,also
że zostanie zakończony, a niep
.cd t<tab>
powinny oferowaćth/to/foo/prime
ito/foo/prime
? A może powinien ograniczyć się do granic katalogu?Odpowiedzi:
Sądzę, że możesz dodać składniki
$PWD
docd
listy ukończenia, choć wydaje się, że wymaga to manipulacji_cd
; to znaczy dostosowana wersja_cd
musi pojawić się najpierw w$fpath
.Następnie u góry
~/zcomp/_cd
dodaj funkcjęa następnie tuż przed
_alternative
wierszem dodaj to, co zwraca do listy alternatywchociaż to zawsze doda
pwd
elementy docd
uzupełnień:z dodatkową logiką można dodawać
$PWD
komponenty tylko wtedy, gdy jest już obecny drugi argument zamiast zawsze.Jednak! To zawsze przeszkadza w
cd
ukończeniu i wymaga, abyśmy małpowali łatanie_cd
ukończenia. Inną opcją byłoby utworzenie nowej nazwy dla funkcji udostępnianej przez argument dwuargumentowycd
, być może wywoływanycdsub
, iPWD
wyświetlanie w tym celu tylko uzupełnienia składników. Dodaj to do~/.zshrc
A potem wypatroszone
_cd
zakończenie, które_cdsub
ma być umieszczone gdzieś w$fpath
:źródło