Uzupełnienia karty Zsh nie działają zgodnie z oczekiwaniami dla ścieżek częściowych

17

Chcę rozróżniać małe i małe litery dla plików i katalogów w zsh. Po przeczytaniu instrukcji przez kilka godzin, oto co wymyśliłem:

zstyle ':completion:*:*:*:*:globbed-files' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:local-directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'

Dodatkowo chcę nacisnąć TABraz, aby wyświetlić możliwe uzupełnienia, modyfikując tylko to, co wpisałem, jeśli jest dokładnie jedno uzupełnienie. Następnie wciśnięcie TABdrugi raz powinno wprowadzić mnie w tryb „uzupełniania menu”. Na podstawie instrukcji wymyśliłem:

zstyle ':completion:*' menu select

Teraz wszystko działa tak, jak powinno, z wyjątkiem jednej okoliczności. Mam dwa foldery Desktopi .rstudio-desktopw moim katalogu domowym. Ponieważ mam setopt globdots, spodziewam się wpisania następującego:

$ cd ~/dktop<TAB>

pozostawić moje polecenie jako wpisane i wyświetlić jako kandydatów do ukończenia Desktopi .rstudio-desktop. Zamiast tego usuwa dktop , pozostawiając mi następujące:

$ cd ~/

Przejrzałem wszystkie odpowiednie podręczniki, przewodniki, pytania dotyczące wymiany stosów i różne inne źródła. Ale cokolwiek robię, nie mogę tego zrobić.

Co ciekawe, jeśli jestem w katalogu domowym i wpisuję następujące, wszystko działa zgodnie z oczekiwaniami:

$ cd dktop<TAB>

Oznacza to, że jest to tylko problem z nieprzedstawionymi segmentami ścieżek (i widać, C-x hże odpowiada to directoriesznacznikowi, a nie local-directoriesużywanemu znacznikowi).

Dla łatwej odtwarzalności, tutaj jest to ~/.zshrc, które odtworzy sytuację i zachowanie opisane powyżej (przetestowane na nowej maszynie wirtualnej El Capitan zshz Homebrew).

Radon Rosborough
źródło
Nie można się rozmnażać. zsh 5.3.1na Arch Linux. cd ~/dktop<tab>daje cd ~/Desktop.
PythonNut
@PythonNut Z zsh 5.3.1systemem OS X problem się powtarza. Interesujące jest to, że istnieje różnica między systemami operacyjnymi.
Radon Rosborough,
1
@PythonNut Właściwie założę się, że to dlatego, że Linux rozróżnia małe i wielkie litery, a macOS nie rozróżnia małych i wielkich liter.
Radon Rosborough,
Przypominamy, że nie wszystkie komputery Mac / macOS nie rozróżniają wielkości liter, zależy to od tego, czy na dysku jest sformatowany rozróżnianie małych i wielkich liter.
konqui

Odpowiedzi:

1

Jednym z możliwych rozwiązań jest:

bindkey "^I" expand-word

Spowoduje to rozwinięcie tabulatora do ~/ścieżki bezwzględnej.

Zaparcie Ninja
źródło
Być może coś mi brakuje, ale nie widzę, w jaki sposób odnosi się to do rozmytych uzupełnień kart lub rozwiązania opisanego powyżej problemu. Jeśli zrobię to, co sugerujesz, naciśnięcie TAB da mi cd /Users/raxod502/dktop, a ukończenie jest wyłączone.
Radon Rosborough
@RadonRosborough Nadzieja polegała na tym, że po przejściu ~/na absolutną ścieżkę zacznie działać rozmyte zakończenie. Wydawało się, że jest to jeden z tych przypadków, w którym problem polega na tym, że raz go ocenia, ale tak naprawdę trzeba go dwukrotnie ocenić, aby pracować, więc posiadanie ścieżki bezwzględnej zamiast ~/oznaczałoby, że wróciłby do konieczności tylko jednej oceny. Ale cholera, przepraszam, zapomniałem, że klucz powiązania zastępuje stare powiązania, i nie mogę znaleźć niczego, co mówi, jeśli możliwe jest nawet powiązanie dwóch funkcji z jednym kluczem. Bez mojego klucza powiązania, czy Twoje zakończenie działa zgodnie z przeznaczeniem, jeśli podane są ścieżki bezwzględne?
Zaparcie
Nie. Nie ma znaczenia, czy ścieżka wejściowa jest ~/dktopczy /Users/raxod502/dktop; wynik jest taki sam, a mianowicie dktopjest usuwany po naciśnięciu klawisza TAB.
Radon Rosborough