zsh(oh-my-zsh)が存在しないディレクトリを完了するのはなぜですか?

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を使用しません)

この動作は、現在のディレクトリに他の一致がない場合にのみ発生するようです。それから私が知らない別の道を見つけなければなりません。

例:

注:私のホームディレクトリに一致するものはありません。mi

→  ~  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表示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

私はそこから明らかなものを見ることができません。

誰かがこれについて少し明らかにしてください。本当に残念です!

編集する:誰かが以前同様の問題を経験したようです。 停止タブ完了プロンプト「messagebus」 しかし、そこには答えがありません:(

修正する:これはoh-my-zshアプリケーションのcd機能です:

→  ~  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
}

答え1

_kadminkadminおそらく、ディレクトリではなくツールの完全な機能でしょう。zsh見つからないコマンド、ディレクトリ、または有効で既知のコマンド引数の完成を完了しようとすると、可能な拡張候補として完成機能が提供され始めます。基本的に、zshいくつかの完成プログラムが付属しており、その多くは必要ないかもしれません。 AIX、BSD、Cygwin、さまざまなLinuxディストリビューションなどのバンドルがあり、すべてを読んでシェルにインストールします。zsh見つからないものを拡張しようとすると、インストールされているすべての完成機能を提供できます。

zsh次のファイルに入れて、より完全な機能を提供しないように設定できます~/.zshrc

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

ファイルを再読み込みすると、まだインストールされていないツールの補完機能は提供されなくなります。zshcompsys(多く)詳細はマンページをご覧ください。

編集する アップデート3に返信する

_kadmin実際のユーザーアカウントの場合は、zsh完成時に提供しないように設定できます。アプローチは、シェルが考慮したいユーザーアカウントをリストするように見えます。これは、リストされたユーザーにのみ付与される名前を制限します。そのzstyle行は次のとおりです。

zstyle ':completion:*' users asgeo1 root

タグの後には、ユーザーの数をいくらでも一覧表示できると思いますusers。その後、シェルはそのユーザーのホームディレクトリのみを機能cdまたは組み込みにできるだけ完成させます。

無視モードでファイルにユーザー名を追加するのがうまくいかない理由はわかりませんcompletion.zsh。変更後に構成を再ロードしていますか?

関連情報