首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为zsh建立一个允许随机数的自动完成函数?

如何为zsh建立一个允许随机数的自动完成函数?
EN

Unix & Linux用户
提问于 2021-10-31 19:46:38
回答 1查看 94关注 0票数 1

我有一个在gitlab repos中管理门票的小脚本。当我键入票证并按下选项卡时,我希望看到:

代码语言:javascript
运行
复制
% ticket
new  -- create a new ticket
#    -- Number of ticket
-v   -- increase verbosity

为了做到这一点,我做了这个不起作用的事情:

代码语言:javascript
运行
复制
#compdef ticket
#autoload

local -a reply

_regex_words commands "ticket commands" \
  'new:create a new ticket' \
  '-v:increase verbosity' \
  '[1-9][0-9]#:open ticket #'
_regex_arguments _ticket /我明白,它无法完成我大脑中的数字--我也不希望它出去,装载可能有数千个数字。但是,指出一个数字是一个可能的完成将是很好的。[^\0]##\0'/ "${reply[@]}"

_ticket "$@"

我明白,它无法完成我大脑中的数字--我也不希望它出去,装载可能有数千个数字。但是,指出一个数字是一个可能的完成将是很好的。

EN

回答 1

Unix & Linux用户

发布于 2021-10-31 23:00:58

_regex_words函数用于文字单词,而不是模式(除了单个*,其中单词可以缩写)。因此,您需要直接处理来自_regex_arguments的数字--如下所示:

代码语言:javascript
运行
复制
#compdef ticket

local -a reply

_regex_words commands "ticket commands" \
  'new:create a new ticket' \
  '-v:increase verbosity'

_regex_arguments _ticket /它有点丑陋,这需要_message。这是通过_alternative实现它的一个副作用,但是在其他地方也有这种风格的例子。如果您有许多像-v这样的正常选项,那么最好对这些选项使用_arguments,而只对更复杂的区域使用_regex_arguments。顺便说一下,您的#autoload标记是多余的。compinit只查看第一行,#autoload或#compdef都会将其标记为可自动显示。[^\0]##\0'/ \
  \( "${reply[@]}" \
  \| 它有点丑陋,这需要D4。这是通过D5实现它的一个副作用,但是在其他地方也有这种风格的例子。如果您有许多像D6这样的正常选项,那么最好对这些选项使用D7,而只对更复杂的区域使用D8。顺便说一下,您的D9标记是多余的。D10只查看第一行,D11或D12都会将其标记为可自动显示。/[1-9][0-9]#\0/' ': _message -e numbers "open ticket"' \)

_ticket "$@"

它有点丑陋,这需要D4。这是通过D5实现它的一个副作用,但是在其他地方也有这种风格的例子。如果您有许多像D6这样的正常选项,那么最好对这些选项使用D7,而只对更复杂的区域使用D8

顺便说一下,您的D9标记是多余的。D10只查看第一行,D11D12都会将其标记为可自动显示。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/675580

复制
相关文章

相似问题

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