以下のコードを使用すると、すべてが期待どおりに機能します。
書き込みをしてキーを
c
押すと、TAB
正しい順序で適切な完成が達成されます。キーを押して
./
押すとTAB
ラベルが完成しますexecutables
。
# Always use menu selection when using unambiguous completions.
zstyle ':completion:*:*:*:*:*' menu 'select'
# Show only completions.
zstyle ':completion:*:*:*:*:*' completer _complete
# Group name becomes the name of the matching tag.
zstyle ':completion:*:*:*:*:*' group-name ''
# Configure the order of tag matching as well as their descriptions.
zstyle -e ':completion:*:*:-command-:*:*' tag-order '
reply=(
"executables:Executables:Executables
builtins:Builtins:Builtins
commands:Commands:Commands
aliases:Aliases:Aliases
functions:Functions:Functions
parameters:Variables:Variables
reserved-words:Keywords:Keywords"
)
'
# Configure the order in which completion groups will be shown.
zstyle ':completion:*:*:-command-:*:*' group-order 'Executables' 'Builtins' 'Commands' 'Aliases' 'Functions' 'Variables' 'Keywords'
# Configure the format for each group/tag description.
zstyle ':completion:*:*:*:*:descriptions' format $'%{\e[0;38;2;0;0;0;48;2;200;150;0m%} %d %{\e[0;38;2;200;150;0;48;2;0;0;0m%}%{\e[0m%}'
# Initialize completion system.
autoload -Uz compinit && compinit
しかし、私が指定したタグが完成を生成しない場合、他のタグも試されます。
これを実証する最も簡単な方法は、スタイル functions
からタグを除外することです。tag-order
zstyle -e ':completion:*:*:-command-:*:*' tag-order '
reply=(
"executables:Executables:Executables
builtins:Builtins:Builtins
commands:Commands:Commands
aliases:Aliases:Aliases
parameters:Variables:Variables
reserved-words:Keywords:Keywords"
)
'
次に、一意のプレフィックスを使用して2つの関数を作成します。
function unique_prefix_A() { }
function unique_prefix_B() { }
今書いて、キーを押すunique_prefix_
とタグがから削除されたTAB
ため、何も表示されないことが予想されます。ただし、、、、、およびは完成機能を提供しないため、デフォルトでは他のタグと一致しようとします。 (つまり、タグを除く)完了を試みます。 functions
tag-order
Executables
Builtins
Commands
Aliases
Variables
Keywords
zsh
functions
したがって、 unique_prefix_A
次の機能を提案します。unique_prefix_B
私はこの動作が気に入らず、私が明示的に指定したタグにのみ検索を制限したいと思います。
このマニュアルはタグの順序スタイルは簡単な解決策を提案します。
- ハイフンのみを含む値がある場合、他の値に指定されたラベルのみが生成されます。通常、指定されたタグが一致を生成できない場合、明示的に選択されていないすべてのタグが最後に試行されます。これは、単一のハイフンのみで構成された単一の値が完成機能を無効にすることを意味します。
アプリケーションソリューション:
# Configure the order of tag matching as well as their descriptions.
zstyle -e ':completion:*:*:-command-:*:*' tag-order '
reply=(
"executables:Executables:Executables
builtins:Builtins:Builtins
commands:Commands:Commands
aliases:Aliases:Aliases
functions:Functions:Functions
parameters:Variables:Variables
reserved-words:Keywords:Keywords"
"-"
)
'
現在の動作は次のとおりです。
書き込みをしてキーを
c
押すと、TAB
正しい順序で適切な完成が達成されます。)
書き込みをしてキーを
./
押してもTAB
何も出ません。
なぜ今はラベルだけが機能しないのですかexecutables
?
どのように修正して目的の動作を取得できますか?
答え1
この場合、タグがexecutable
呼び出されます。_files -g '*(-*)
次に_files
moreが呼び出されるので、次のように_tags
指定する必要があります。関数に暗黙的に指定されたラベルの完成、また。
zstyle -e ':completion:*:*:-command-:*:*' tag-order '
reply=(
"executables:Executables:Executables
builtins:Builtins:Builtins
commands:Commands:Commands
aliases:Aliases:Aliases
functions:Functions:Functions
parameters:Variables:Variables
reserved-words:Keywords:Keywords
globbed-files directories"
"-"
)
'
この場合は追加しglobbed-files
て便利です。directories
% ls -al
total 80
drwxr-xr-x 3 t t 4096 May 18 08:27 .
drwxrwxrwt 16 root root 69632 May 18 15:27 ..
drwxr-xr-x 2 t t 4096 May 18 08:27 directory
-rwxr-xr-x 1 t t 0 May 18 08:27 executable-file
-rw-r--r-- 1 t t 0 May 18 08:27 test
% ./<TAB>
Executables
directory/ executable-file*
ただし、上記の設定では、ディレクトリとローカルの実行可能ファイルは同じ「実行可能ファイル」グループに属します。 「ディレクトリ」が別のグループに入るようにするには、次のように指定できます。file-patterns
直接次のように使用してください。
zstyle ':completion:*:*:-command-:*:*' file-patterns \
'*(#q-*):executables:Executables *(-/):directories:Directories'
zstyle -e ':completion:*:*:-command-:*:*' tag-order '
reply=(
"executables:Executables:Executables
builtins:Builtins:Builtins
commands:Commands:Commands
aliases:Aliases:Aliases
functions:Functions:Functions
parameters:Variables:Variables
reserved-words:Keywords:Keywords
directories:Directories"
-
)
'
次の例では、「Directory」と「Executable」が別々のグループにあります。
% ls -al
total 80
drwxr-xr-x 3 t t 4096 May 18 08:27 .
drwxrwxrwt 15 root root 69632 May 18 15:24 ..
drwxr-xr-x 2 t t 4096 May 18 08:27 directory
-rwxr-xr-x 1 t t 0 May 18 08:27 executable-file
-rw-r--r-- 1 t t 0 May 18 08:27 test
% ./<TAB>
Executables
executable-file*
Directories
directory/
以下は、生成された最小の.zshrcの例です。
autoload -Uz compinit && compinit
zstyle ':completion:*:*:*:*:*' group-name ''
zstyle ':completion:*:descriptions' format '%B%F{black}%d%f%b'
zstyle ':completion:*:*:*:*:*' menu 'select'
# This comment out block is just for a reminder of my answer's first half.
# zstyle -e ':completion:*:*:-command-:*:*' tag-order '
# reply=(
# "executables:Executables:Executables
# builtins:Builtins:Builtins
# commands:Commands:Commands
# aliases:Aliases:Aliases
# functions:Functions:Functions
# parameters:Variables:Variables
# reserved-words:Keywords:Keywords
# globbed-files directories"
# "-"
# )
# '
zstyle ':completion:*:*:-command-:*:*' file-patterns \
'*(#q-*):executables:Executables *(-/):directories:Directories'
zstyle -e ':completion:*:*:-command-:*:*' tag-order '
reply=(
"executables:Executables:Executables
builtins:Builtins:Builtins
commands:Commands:Commands
aliases:Aliases:Aliases
functions:Functions:Functions
parameters:Variables:Variables
reserved-words:Keywords:Keywords
directories:Directories"
-
)
'
更新:不要なブロックをコメントアウトしました。