Intereting Posts
Обеспечение стабильности Netflix-desktop почему cisco VPNC работает во второй раз каждый раз, а не в первый раз Команда arm-linux-gcc не работает завершение bash в режиме Posix Команда командной строки для добавления пробела к регулярному выражению Сделать жесткие диски thunar в / media, а не / run / media / username? Что делает эта линия в bash? Параметрируемая || имяскрипт Как скопировать файлы в AIX из FS в другой FS? Sftp: локальный удален? Доля NFS внутри общего ресурса NFS или Samba недоступна Как я могу узнать, какие флаги компоновщика необходимы для использования данной функции библиотеки C? Переключение между двумя программами framebuffer Как найти установленные пакеты, которые не имеют кандидата на установку? Относительно логического печатного рабочего каталога и физического печатного рабочего каталога как отредактировать следующую строку после сопоставления шаблона и добавить строку, если она не существует

Почему 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 } 

_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 не помогло – вы перезагрузили конфигурацию после внесения изменений?