Я хочу нечёткое завершение без учета регистра для файлов и каталогов в 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
наArch Linux
.cd ~/dktop<tab>
доходностьcd ~/Desktop
.zsh 5.3.1
на OS X проблема воспроизводит. Интересно, что есть разница между операционными системами.Ответы:
Одним из возможных решений является сделать:
Это приведет к расширению вкладки
~/
до абсолютного пути.источник
cd /Users/raxod502/dktop
, и завершение будет отключено.~/
свой абсолютный путь, нечеткое завершение начнет работать. Казалось, один из тех случаев, когда проблема заключается в том, что он оценивает его один раз, но на самом деле вам нужно, чтобы он оценивал дважды, чтобы работать, поэтому наличие абсолютного пути вместо~/
означало бы, что нужно будет вернуться только к одной оценке. Но дерьмо, извините, я забыл, что bindkey заменяет старые привязки, и я не могу найти ничего, что говорит, возможно ли связать две функции с одной клавишей. Без моего bindkey, ваше завершение работает как задумано, когда дан абсолютные пути?~/dktop
или/Users/raxod502/dktop
; результат тот же, а именно тот,dktop
который удаляется при нажатии клавиши TAB.