首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何列出所有zsh自动完成?

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

Stack Overflow用户
提问于 2016-10-13 01:26:48
回答 1查看 4.2K关注 0票数 17

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

有没有一种方法可以列出zsh将完成的命令,而不需要查看完成文件?例如,是否有一个内置命令会列出它们?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-13 07:25:28

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

您可以使用以下命令获得包含相关完成的命令的完整列表:

代码语言:javascript
运行
复制
for command completion in ${(kv)_comps:#-*(-|-,*)}
do
    printf "%-32s %s\n" $command $completion
done | sort

解释:

  • for command completion in LIST; COMMANDLIST上进行迭代,同时在每次迭代中使用两个元素commandcompletion,并为它们运行COMMAND。这也是for-loop的一个简短形式,它不需要dodone
  • ${(kv)ASSOC_ARRAY}将关联数组ASSOC_ARRAY扩展为键-值对的空格分隔列表.因此,这是一个交替的列表"key1 value1 key2 value2 key3 value3…“。,这是由for-loop的两个参数处理的。$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运行,才能得到有序的列表。
票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40010848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档