如何修复cheat命令zsh tab补全脚本中$state变量未设置的bug
修复cheat项目zsh补全脚本$state未赋值问题
问题核心
官方提供的cheat.zsh补全脚本遗漏了$state变量的赋值触发逻辑,导致后续分支判断无法执行,补全功能失效。
修复步骤
- 第一步:定位补全脚本
ohmyzsh环境下,补全脚本通常存放在两个位置二选一:- 自定义插件目录:
~/.oh-my-zsh/custom/plugins/cheat/cheat.zsh - 全局补全目录:
~/.oh-my-zsh/completions/_cheat
- 自定义插件目录:
- 第二步:修改脚本内容
打开对应脚本,找到_cheat函数,做如下三处修改:- 函数开头添加
$state变量声明,和其他local变量放在一起即可:
_cheat() { local state curcontext="$curcontext" # 原有其他代码保持不变- 调整
_arguments调用逻辑,删除后面多余的&& return 0,并在参数列表末尾添加状态跳转规则,同时可自动补全$state的合法取值:
# 原来的写法参考 # _arguments \ # '(-v --version)'{-v,--version}'[输出版本信息]' \ # # 其他已有参数保持不变 # && return 0 # 修改后的写法 _arguments \ '(-v --version)'{-v,--version}'[输出版本信息]' \ # 其他已有参数全部保持不变,只需要在末尾新增下面两行,删除原来的&& return 0 '1:状态值:(none full personal taglist pathlist)' \ '*:剩余参数:->args'- 验证
case $state分支的匹配逻辑,官方脚本已默认覆盖none/full/personal/taglist/pathlist五个取值的补全逻辑,无需额外修改。
- 函数开头添加
- 第三步:生效补全
执行以下命令清除旧补全缓存并加载新配置:
也可以直接重启终端生效。rm -f ~/.zcompdump* compinit
ohmyzsh环境适配说明
ohmyzsh默认会自动加载~/.oh-my-zsh/completions/目录下前缀为_的补全脚本,如果你是直接下载的官方cheat.zsh脚本,建议重命名为_cheat放到上述目录,无需修改.zshrc配置即可生效。
内容的提问来源于stack exchange,提问作者StevieD
相关产品推荐
相关产品推荐

