Nie jestem pewien, czy nadal śledzisz to pytanie, ale chciałbym pomóc. Minęło trochę czasu, odkąd zagłębiłem się w system uzupełniania zsh, więc będzie to dobra wymówka.
Na razie wykorzystamy tę odpowiedź jako ciągłe narzędzie, aby dostarczyć użytecznych ciekawostek, które pomogą Tobie (i mnie) rozwiązać problem.
Jak widać, system uzupełniania zsh jest bardzo wydajny. Czasami wykonuje zadania, których nie chcesz uzupełniać. Na przykład prawie zawsze chcesz ograniczyć argumenty do polecenia „cd”, aby były katalogami. JEDNAK w Zsh mogą to być katalogi systemu plików, nazwane katalogi, katalogi w różnych zmiennych ścieżek, a nawet katalogi przechowywane w standardowych zmiennych powłoki. Myślę więc, że pierwszym krokiem jest określenie „kontekstu” ukończenia.
Przejdź do katalogu my_folder powyżej, a następnie wpisz:
cd p<CTRL-X>h
CTRL-Xh to domyślna kombinacja klawiszy wyświetlająca bieżący kontekst do ukończenia. Daj mi znać, jaki jest wynik działania tej kombinacji klawiszy. Na przykład moje dane wyjściowe wyglądały tak:
tags in context :completion::complete:cd::
local-directories (_alternative _cd (eval))
Kluczową kwestią, na którą należy zwrócić uwagę, są „katalogi lokalne”. To, czego nie widzimy tutaj, to często występujący element „path-katalogi”, który odnosi się do katalogów, które można znaleźć w $ cdpath i ewentualnie w innych lokalizacjach. (Nie pamiętam od razu.)
Jeśli zobaczysz elementy inne niż „katalogi lokalne”, będzie to wskazówka, skąd może pochodzić ten nieuczciwy wpis „proxy”. Na przykład, oto typy elementów, które moja konfiguracja zsh będzie próbowała wykonać, jeśli spróbuję ukończyć od początku wiersza poleceń bez wpisywania czegokolwiek:
commands builtins functions aliases suffix-aliases reserved-words jobs parameters
Rzeczywiście możesz zobaczyć jeden lub więcej tych elementów z wyjściem CTRL-Xh, a nawet przedmioty, których nie wymieniłem powyżej. (To tylko przykłady)
Oto sposób, w jaki możesz pomóc ograniczyć zsh do zapewniania tylko lokalnych katalogów i katalogów $ cdpath jako opcji uzupełniania:
zstyle ':completion:*:cd:*' tag-order local-directories path-directories
Jeśli nie chcesz jakiejś średnio przydatnej magii cd, którą oferuje zsh, porzuć „katalogi ścieżek” od końca i wierzę, że uzyskasz pożądane zachowanie. Będziesz chciał umieścić to w swoim pliku .zshrc, aby był trwały między sesjami. Daj mi znać, jeśli to pomoże.