Я хочу нечёткое завершение без учета регистра для файлов и каталогов в 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.