Po prostu zacząłem używać zsh z oh-my-zsh i zauważyłem coś dziwnego podczas autouzupełniania z cd
.
Załóżmy, że mam folder:
my_folder/
subfolder/
another_subfolder/
file.txt
Kiedy użyłem bash, mogłem wpisać:
$ cd p<tab>
I nic by się nie wydarzyło, ponieważ nic nie my_folder
zaczyna się od p
, ale jeśli zrobię to samo w Zsh, to automatycznie uzupełnia słowo proxy
, które, jak zakładam, jest jakimś katalogiem w innym systemie plików?
Nie jestem pewien, czy coś jest źle skonfigurowane lub czy jest to coś w sposobie, w jaki autouzupełnianie działa w zsh, czego nie rozumiem.
EDYTOWAĆ:
Wyjście CTRL + Xh:
tags in context :completion::complete:cd::
local-directories named-directories (_alternative _cd (eval))
users named-directories directory-stack (_tilde _alternative _cd (eval))
users (_users _tilde _alternative _cd (eval))
$CDPATH
zawiera katalog, który zawiera podkatalog o nazwieproxy
? Jeśli tak, to pożądane zachowanie.$CDPATH
po prostu powraca.
.Odpowiedzi:
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:
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:
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:
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:
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.
źródło