zshをインポートすると、ユーザーは完了しません。

zshをインポートすると、ユーザーは完了しません。

名前がサブディレクトリのディレクトリがありますsrc。ディレクトリを入力しcd sてクリックすると、完了したいと思います。TAB代わりにzsh、システムで次から始めるすべてのユーザーを完成させてくださいs

Completing local directory
src/
Completing user
saeumair  sbrg      scan-nix  schlosse  sdwoods   shutdown   
sis-user  smmsp     snitch    srabhina  sshd      sterpeni  sushid    sync 

私の罪は次のとおりです.zshrc

zstyle ':completion:*:directory-stack' list-colors '=(#b) \
        #([0-9]#)*( *)==95=38;5;12'

私はそれをcd歴史を完成させるために使用します。ユーザーのためにこの機能を完了せずにこの機能を維持する方法をご存知ですか?

答え1

このcdablevarsオプションは名前付きディレクトリを作成する役割を担うので、ユーザーはcdの有効な引数になります。使用しない場合は使用してくださいunsetopt cdablevars

CDの完成内容を変更するには、スタイルを使用できますtag-order。たとえば、ローカルディレクトリのみを最初に試すには、次のようにします。

    zstyle ':completion:*:cd:*' tag-order local-directories

特定の状況で適用可能なタグを表示する便利なショートカットではなく、Ctrl-X hを押すだけですtab

答え2

user はコマンドの有効な引数なので、cd以下を選択できるため、完成として提供されます。cdable_vars開いている。このオプションを使用すると、代わりにcd foo使用できますcd ~foofooチルダ拡張、設定のユーザー名またはディレクトリ名を含みますhash -d(オプション名にもかかわらず、シェル変数を除く)。

完了コードには、ディレクトリを完了しようとせずにディレクトリを指定するオプションはありません。この問題を解決するには、完成関数の周りにラッパーを使用できますcd

unset -f _cd
autoload -U _cd
functions[_cd_orig]=_cd
_cd () {
  setopt local_options no_cdable_vars
  _cd_orig $@[@]
}

関連情報