「トークン順序」スタイルの「-」(ハイフン)値が明示的に指定されていても、「実行可能」タグの一致を防ぐのはなぜですか? [閉鎖]

「トークン順序」スタイルの「-」(ハイフン)値が明示的に指定されていても、「実行可能」タグの一致を防ぐのはなぜですか? [閉鎖]

以下のコードを使用すると、すべてが期待どおりに機能します。

  • 書き込みをしてキーを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ため、何も表示されないことが予想されます。ただし、、、、、およびは完成機能を提供しないため、デフォルトでは他のタグと一致しようとします。 (つまり、タグを除く)完了を試みます。 functionstag-order
ExecutablesBuiltinsCommandsAliasesVariablesKeywordszshfunctions

したがって、 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 '*(-*)次に_filesmoreが呼び出されるので、次のように_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"
            -
          )
'

更新:不要なブロックをコメントアウトしました。

関連情報