gpt4 book ai didi

zsh - 从文件中生成 zsh 完整参数

转载 作者:行者123 更新时间:2023-12-04 05:18:43 26 4
gpt4 key购买 nike

zsh很棒,但它的完成系统非常多样化。而且文档缺乏很好的例子。是否有用于完成特定应用程序的模板。完成将从文件中获取其匹配数据,由换行符分隔?

我尝试修改我的一个旧示例,该示例采用“实时”匹配数据:

~ % cat .zsh/completers/_jazzup 
#compdef jazz_up
_arguments "2: :(`mpc lsplaylists|sed -e 's# #\\\\ #g'`)"

我可以供应 cat my_file那里而不是 mpc调用等等,但是有没有更优雅的方法来完成这个简单的任务?并且该完成是特定于位置的:您能否提供一个示例,其中 zsh 将在识别程序名称后的任何时候尝试完成?

匹配数据将有空格等,完成应转义 WS。例如:
Foo bar
Barbaric
Get it (42)

现在,如果为命令配置该完成 Say ,我们应该从 zsh中得到这种行为:
$ Say Fo<TAB>
$ Say Foo\ bar
$ Say Ge<TAB>
$ Say Get\ it\ \(42\)

最佳答案

使用 _describe 可以更好地解决简单的完成需求,它将包含完成选项的数组和它们的描述配对(您可以使用多个数组/描述对,请查看手册)。

( _arguments 很棒,但太复杂了。)

[...]

首先创建一个文件

echo "foo\nbar\nbaz\nwith spac e s\noh:noes\noh\:yes" >! ~/simple-complete

然后创建一个文件 _simple在您的某个地方 $fpath :
#compdef simple

# you may wish to modify the expansion options here
# PS: 'f' is the flag making one entry per line
cmds=( ${(uf)"$(< ~/simple-complete)"} )

# main advantage here is that it is easy to understand, see alternative below
_describe 'a description of the completion options' cmds

# this is the equivalent _arguments command... too complex for what it does
## _arguments '*:foo:(${cmds})'

然后
function simple() { echo $* }
autoload _simple # do not forget BEFORE the next cmd!
compdef _simple simple # binds the completion function to a command

simple [TAB]

有用。只要确保完成文件 _simple放在您的 fpath 中的某个位置.

请注意 :在选项列表中应该用于将选项与其(个人)描述分开( oh:noes )。所以这不适用于 _describe除非你引用它( oh\:yes )。注释掉的 _arguments示例不会使用 :作为分隔符。

关于zsh - 从文件中生成 zsh 完整参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17318913/

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