Я хочу нечёткое завершение без учета регистра для файлов и каталогов в zsh
. Прочитав руководство в течение нескольких часов, я пришел к следующему:
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\_}'
Кроме того, я хочу нажать TAB
один раз, чтобы отобразить возможные варианты завершения, изменив только то, что я набрал, если есть только одно завершение. Затем TAB
повторное нажатие должно перевести меня в режим «Завершение меню». Основываясь на руководствах, я придумал это:
zstyle ':completion:*' menu select
Теперь все работает как надо, кроме одного обстоятельства. У меня есть две папки Desktop
и .rstudio-desktop
в моем домашнем каталоге. Так как у меня есть setopt globdots
, я ожидаю, набрав следующее:
$ cd ~/dktop<TAB>
оставить мою команду, как введено, и отобразить в качестве кандидатов на завершение Desktop
и .rstudio-desktop
. Вместо этого он удаляет dktop
, оставляя мне следующее:
$ cd ~/
Я просмотрел все соответствующие руководства, руководства, вопросы по обмену стеками и другие источники. Но что бы я ни делал, я не могу заставить это работать.
Интересно, что если я нахожусь в домашнем каталоге и набираю следующее, то все работает как положено:
$ cd dktop<TAB>
То есть это проблема только с не ведущими сегментами путей (и вы можете видеть, C-x h
что это соответствует directories
тегу, а не используемому local-directories
тегу).
Для облегчения воспроизводимости, здесь есть , ~/.zshrc
что будет воспроизвести ситуацию и поведение , описанное выше (проверено на свежей виртуальной машине El Capitan с zsh
от Homebrew).
zsh 5.3.1
на OS X проблема воспроизводит. Интересно, что есть разница между операционными системами.
zsh 5.3.1
наArch Linux
.cd ~/dktop<tab>
доходностьcd ~/Desktop
.