Почему zsh (oh-my-zsh) заполняет каталоги, которые не существуют?

ОБНОВЛЕНИЕ 3 Я разработал, что эти досадные параметры автозаполнения на самом деле являются именами пользователей . Т.е. они существуют в /etc/passwd меня есть пользователи, такие как _kadmin_admin и _kadmin_changepw, и многие другие, начиная с подчеркивания. Это может быть специфично для OSX.

Oh-my-zsh автозаполняется с этими именами пользователей, когда он не может найти никаких других совпадений. Я попытался добавить эти имена пользователей в список «Не заполнять неинтересные пользователи» в ~/.oh-my-zsh/lib/completion.zsh , но это не сработало. Я не уверен, почему?

Стоит ли вообще останавливать oh-my-zsh от автозаполнения имен пользователей?


Я расстраиваюсь каким-то странным поведением в ZSH или oh-my-zsh. Я не уверен, что это вызвало бы.

Кажется, автозаполнение ищет некоторые странные каталоги, которые я не хочу. Кажется, что они представляют собой некоторые SVN-каталоги, о которых я ничего не знаю и не знаю, почему они будут в пути. (Я даже не использую SVN)

Такое поведение появляется только в том случае, если в текущем каталоге нет других совпадений – тогда он должен выглядеть по другому пути, о котором я понятия не имею.

Пример:

ПРИМЕЧАНИЕ. В моем домашнем каталоге нет ничего, что соответствовало бы

 → ~ cd mi<tab> → ~ cd _kadmin 

Т.е. он превращает mi в _kadmin . Я не знаю, почему он соответствует этому каталогу.

Если я попытаюсь фактически перейти в этот каталог, я все равно получаю ошибку (так как это не полное имя каталога):

 → ~ cd _kadmin cd:cd:10: no such file or directory: _kadmin 

Если я продолжаю нажимать <tab> то он будет соответствовать имени полного каталога:

 → ~ cd mi<tab><tab><tab> → ~ cd kadmin_admin → ~_svn → ~_svn pwd /var/empty 

Я понятия не имею, что там происходит. Я понятия не имею, что такое kadmin_admin. И почему, когда я ~_svn в него, зачем мне теперь получать имя каталога ~_svn , а затем, если я PWD он показывает /var/empty

Это мой путь:

 /Users/asgeo1/.rvm/gems/ruby-1.9.3-p194/bin:/Users/asgeo1/.rvm/gems/ruby-1.9.3-p194@global/bin:/Users/asgeo1/.rvm/rubies/ruby-1.9.3-p194/bin:/Users/asgeo1/.rvm/bin:/usr/local/php54/bin:/Users/asgeo1/Projects/dotfiles/bin:/Applications/Postgres.app/Contents/MacOS/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin 

В этом нет ничего очевидного, что я вижу.

Пожалуйста, кто-то пролил свет на это. Меня это очень расстраивает!

EDIT: Кажется, у кого-то была аналогичная проблема: Завершить вкладку, предлагая «messagebus». Там нет ответов 🙁

UPDATE: это функция cd, которая применяется oh-my-zsh:

 → ~ which cd cd () { if [[ "x$*" = "x..." ]] then cd ../.. elif [[ "x$*" = "x...." ]] then cd ../../.. elif [[ "x$*" = "x....." ]] then cd ../../.. elif [[ "x$*" = "x......" ]] then cd ../../../.. else builtin cd "$@" fi } 

One Solution collect form web for “Почему zsh (oh-my-zsh) заполняет каталоги, которые не существуют?”

_kadmin , вероятно, является дополнительной функцией для инструмента kadmin , а не каталога. Если вы попытаетесь выполнить что-то, что zsh не может найти в качестве команды, каталога или допустимого и известного значения аргумента команды, тогда он начинает предлагать функции завершения как возможные кандидаты на расширение. По умолчанию zsh поставляется с большим количеством разработчиков, многие из которых вам могут не понадобиться – есть пакеты для AIX, BSD, Cygwin, различных дистрибутивов Linux и т. Д., И все они считываются и устанавливаются в оболочку. Если вы попытаетесь расширить что-то, чего не может найти zsh , у него есть все установленные функции завершения, чтобы предложить вам.

Вы настраиваете zsh чтобы не предлагать дополнительные функции, помещая это в ваш ~/.zshrc :

 zstyle ':completion:*:functions' ignored-patterns '_*' 

Перезагрузите файл, и вам больше не нужно предлагать функции завершения для инструментов, которые вы не установили. Посмотрите на man- zshcompsys (много) более подробно.

EDIT в ответ на ОБНОВЛЕНИЕ 3

Если _kadmin – фактически учетная запись пользователя, вы можете настроить zsh чтобы не предлагать ее в завершение. Кажется, что подход заключается в перечислении учетных записей пользователей, которые вы хотите, чтобы оболочка рассматривала, что ограничивает любые имена, предлагаемые только перечисленным. zstyle выглядит примерно так:

 zstyle ':completion:*' users asgeo1 root 

Я думаю, вы можете перечислить столько пользователей, сколько захотите после тега users . После этого оболочка предложит только домашние каталоги этих пользователей как возможные доработки для функции cd или встроенного.

Я не знаю, почему добавление имени пользователя в игнорируемые шаблоны в файле complete.zsh не помогло – вы перезагрузили конфигурацию после внесения изменений?

  • Какая магия позволяет мне добавлять удаленные файлы при вводе команды scp?
  • Как фильтровать glob в zsh
  • Как создать псевдоним для zsh?
  • zsh завершение по истории не работает
  • Как расширить подстроку команды?
  • Многомесячный просмотр в календаре (cal) в OS X
  • Задания zsh и команды unznow bzr
  • Команда Wrap в подсказке
  • Без учета . и .. из результатов поиска и ls
  • выделение коррекции zsh
  • Внедрить десериализацию значения ключа или что-то подобное
  • Linux и Unix - лучшая ОС в мире.