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ąć TAB
raz, 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 TAB
drugi 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 Desktop
i .rstudio-desktop
w 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 Desktop
i .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 directories
znacznikowi, a nie local-directories
uż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 zsh
z Homebrew).
źródło
zsh 5.3.1
naArch Linux
.cd ~/dktop<tab>
dajecd ~/Desktop
.zsh 5.3.1
systemem OS X problem się powtarza. Interesujące jest to, że istnieje różnica między systemami operacyjnymi.Odpowiedzi:
Jednym z możliwych rozwiązań jest:
Spowoduje to rozwinięcie tabulatora do
~/
ścieżki bezwzględnej.źródło
cd /Users/raxod502/dktop
, a ukończenie jest wyłączone.~/
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?~/dktop
czy/Users/raxod502/dktop
; wynik jest taki sam, a mianowiciedktop
jest usuwany po naciśnięciu klawisza TAB.