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 интерпретируется как статический именованный каталог, который может быть определен следующими средствами:

  1. автоматически для домашних каталогов: ~someone это домашний каталог пользователя кого-то.
  2. установив параметр оболочки в строковое значение, которое начинается с /:

    % SOMEWHERE=/some/directory
    % print ~SOMEWHERE
    /some/directory
    
  3. используя hash -d: hash -d SOMEWHERE=/some/directory

Я предполагаю, что в данном случае это домашний каталог пользователя gnats. Который, насколько я могу судить, создается по умолчанию, по крайней мере, в Debian и Ubuntu.

Другие вопросы по тегам