Завершення вкладки Zsh не працюють, як потрібно для часткових шляхів


17

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

@PythonNut З zsh 5.3.1ОС X проблема не відтворюється. Цікаво, що між операційними системами є різниця.
Радон Росборо

1
@PythonNut Насправді, я думаю, що це тому, що Linux чутливий до регістру, а macOS нечутливий до регістру.
Радон Росборо

Як дружнє нагадування, не всі Macs / macOS не залежать від регістру, це залежить від того, наскільки ваш диск буде сформований з урахуванням регістру чи ні.
konqui

Відповіді:


1

Одне можливе рішення - зробити:

bindkey "^I" expand-word

Це призведе до розширення вкладки до ~/абсолютного шляху.


Можливо, мені чогось не вистачає, але я не бачу, як це стосується якихось нечітких доповнень вкладки чи вирішення проблеми, викладеної вище. Якщо я зроблю так, як ви запропонували, натискання кнопки TAB надасть мені cd /Users/raxod502/dktop, і завершення буде відключено.
Радон Росборо

@RadonRosborough Надія полягала в тому, що, розширившись ~/до абсолютного шляху, нечітке завершення почне працювати. Здавалося, один з тих випадків, коли проблема полягає в тому, що він оцінює його один раз, але вам потрібно, щоб він оцінив двічі для роботи, тож наявність абсолютного шляху замість ~/означатиме, що він повернеться до необхідності лише одного оцінювання. Але лайно, вибачте, я забув, що bindkey замінює старі прив’язки, і я не можу знайти нічого, що говорить про те, чи можливо навіть прив’язати дві функції до однієї клавіші. Без мого прив'язки, чи працює ваше завершення так, як задумано, коли вам задані абсолютні шляхи?
ConstipatedNinja

Ні. Це не має значення, чи є вхідний шлях ~/dktopчи /Users/raxod502/dktop; результат такий же, а саме, що dktopвидаляється, коли я натискаю кнопку TAB.
Радон Росборо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.