名前がサブディレクトリのディレクトリがあります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 ~foo
。foo
チルダ拡張、設定のユーザー名またはディレクトリ名を含みますhash -d
(オプション名にもかかわらず、シェル変数を除く)。
完了コードには、ディレクトリを完了しようとせずにディレクトリを指定するオプションはありません。この問題を解決するには、完成関数の周りにラッパーを使用できますcd
。
unset -f _cd
autoload -U _cd
functions[_cd_orig]=_cd
_cd () {
setopt local_options no_cdable_vars
_cd_orig $@[@]
}