ZSH + Prezto: проблема с завершением вкладки CD
Я уже давно думаю о переходе на zsh и prezto, но есть некоторые неудобства, которые я хотел бы решить в первую очередь.
Самым большим из них является тот факт, что кажется, что завершение табуляции для 'cd' как-то испорчено. Например, у меня есть каталог под названием "git" в моем домашнем каталоге для моих проектов git, и я часто хочу перейти к нему из домашнего каталога, то есть я пишу это:
~ >>> cd g[TAB]
~ >>> cd git
Поскольку "git" - единственная папка, начинающаяся с "g", я, очевидно, ожидаю, что это будет результатом завершения вкладки. Однако, с ZSH и prezto, он завершает это так:
~ >>> cd g[TAB]
~ >>> cd gnats
Повторное использование tab также попытается завершить подпапку "gnats", ни один из которых не существует!
До сих пор я выяснил, что это, скорее всего, вызвано prezto, поскольку его отключение возвращается к ожидаемому поведению.
Любые идеи, какую конфигурацию я должен добавить, чтобы исправить это?
1 ответ
Наиболее вероятным виновником является вариант оболочки CDABLE_VARS
, Вы можете проверить, установлен ли он с setopt | grep cdablevars
, Поскольку это не настройка по умолчанию, вы можете либо найти, где она установлена в prezto, либо явно сбросить ее с помощью setopt nocdablevars
после того как презто поставлено.
Объяснение:
Если CDABLE_VARS
Zsh обрабатывает аргументы cd
которые не являются каталогами и не начинаются с /
как будто они начинаются с ~
, Это распространяется на автозаполнение для cd
,
Если имя каталога начинается с ~
(как подразумевается CDABLE_VARS
), zsh проверяет, если элемент до первого /
может быть заменен несколькими различными способами. В твоем случае, ~gnats
интерпретируется как статический именованный каталог, который может быть определен следующими средствами:
- автоматически для домашних каталогов:
~someone
это домашний каталог пользователя кого-то. установив параметр оболочки в строковое значение, которое начинается с
/
:% SOMEWHERE=/some/directory % print ~SOMEWHERE /some/directory
используя
hash -d
:hash -d SOMEWHERE=/some/directory
Я предполагаю, что в данном случае это домашний каталог пользователя gnats. Который, насколько я могу судить, создается по умолчанию, по крайней мере, в Debian и Ubuntu.