gpt4 book ai didi

shell - zsh 根据一个参数补全

转载 作者:行者123 更新时间:2023-12-04 15:12:09 25 4
gpt4 key购买 nike

我是一个非常快乐的 zsh 用户,特别欣赏它的完成子系统。
最近我正在尝试增强一些完成命令,尤其是那些我经常使用的命令(例如 rm)。
在 zsh 中执行以下命令:

rm <TAB>

使 zsh 按预期完成当前目录的文件。
我想要做的是让 zsh 完成以下变体:
rm -r <TAB>

只有目录。

任何知道如何参数补全的 zsh Guru 以便考虑 (-r)
范围?

最佳答案

这可以通过编辑 rm 的 zsh 补全功能来实现。到所需的行为。

Z-shell 补全函数都定义在您系统的某处。在 OSX 上,它位于 /usr/local/zsh/5.0.2/share/zsh/functions 下. Linux 可能有类似的地方。
rm的补全函数在名为 _rm 的文件中定义.它比较小。 (如果您感兴趣, rmdir 的完成在 _directories 中定义)。

rm -r 设置完成,我们需要修改如下所示的行:

'(-r -R --recursive)'{-r,-R,--recursive}'[remove directories and their contents recursively]'

我们添加到这一行的末尾,在引号内:
:*:file:_directories

我很确定这会通知 zsh那个完成时 -r给出的参数应该包括 files ,以及我们获得这些的方式 files是通过使用 _directories函数(只返回目录)。

(我不是 100% 确定,因为 zsh 是一只野兽,我仍然在思考)。

这是一个示例用法:

enter image description here

这是更改的差异,以使其更加清晰:)
<   '(-r -R --recursive)'{-r,-R,--recursive}'[remove directories and their contents recursively]:*:file:_directories'
---
> '(-r -R --recursive)'{-r,-R,--recursive}'[remove directories and their contents recursively]'

关于shell - zsh 根据一个参数补全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18764873/

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