gpt4 book ai didi

shell - 如何列出所有 zsh 自动完成?

转载 作者:行者123 更新时间:2023-12-04 13:57:49 24 4
gpt4 key购买 nike

在 zsh 中,我试图了解哪些命令具有现有完成,以便我可以为没有完成的命令编写完成。

有没有办法列出 zsh 将完成的命令而不用 grepping 完成文件?例如,是否有一个内置命令可以列出它们?

最佳答案

已知完成的列表存储在关联数组 _comps 中。 .命令名称和其他完成上下文用作 _comps 的键,而相应的完成函数则存储为值。

您可以使用以下命令获取带有关联补全的命令的完整列表:

for command completion in ${(kv)_comps:#-*(-|-,*)}
do
printf "%-32s %s\n" $command $completion
done | sort

解释:
  • for command completion in LIST; COMMAND遍历 LIST同时取两个元素,commandcompletion , 在每次迭代和运行时 COMMAND为他们。这也是 for 的缩写形式-不需要的循环dodone .
  • ${(kv)ASSOC_ARRAY}展开关联数组 ASSOC_ARRAY到一个空格分隔的键值对列表。所以它是一个“key1 value1 key2 value2 key3 value3 ...”的交替列表,被for的两个参数占用-环形。 $ASSOC_ARRAY只会扩展到值列表。
  • ${ASSOC_ARRAY:#PATTERN}过滤掉ASSOC_ARRAY的所有元素从它的扩展中,键匹配 PATTERN .
  • 图案-*(-|-,*)匹配所有特殊上下文的名称,例如 -math- , -parameter--value-,NAME,COMMAND .它还会过滤任何与 -*- 匹配的命令名称或 -*-,* , 这样的命令是否应该在您的系统上完成。 (您可以不考虑模式过滤器以确保)
  • printf "%-32s %s\n" $command $completion进行格式化输出,以便您获得一张漂亮的表格。 $command打印代替 %-32s , 用左对齐填充到 32 个字符 ( - )。 $completion打印代替 %s .
  • | sort : 关联数组是无序的,因此循环的输出需要通过 sort 运行以获得有序列表。
  • 关于shell - 如何列出所有 zsh 自动完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40010848/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com