调试zsh竞争功能的最佳方法

问题描述

当我们运行compinit时,它将重新定义所有执行完成的小部件。

如果我正在使用完成功能,则可以使用rm -f ~/.zcompdump; compinit来查看新的完成功能如何工作。

但是,我认为有一种更有效的方法

假设我从zsh-completions编写了以下完成函数

#compdef cmd
local -a subcmds
subcmds=('c:description for c command' 'd:description for d command')
_describe 'command' subcmds

如何快速修改功能的一小部分并查看其工作原理。

解决方法

不需要重新运行T[N]。您可以使用compinit定义新的完成功能,条件是可以在compdef中找到它,例如:

$fpath

compdef -a _cmd cmd 标记为-a,用于自动加载。

我倾向于在临时目录或本地git checkout中工作,因此定义以下别名可将当前目录快速添加到_cmd的开头:

$fpath

修改可自动加载的功能后,重新加载也很有用。为此,我具有以下功能,该功能还删除了该功能中定义的功能:

    alias -- +fpath='fpath=( ~+ $fpath)'

我要做的另一件事是,我已经在freload() { local func for func; do unfunction ${(k)functions_source[(R)${functions_source[$func]:-X(#s)}]:-$func}; autoload -U $func; done } 中定义了compdef _foo foo,通过直接在命令中定义.zshrc函数,可以非常快速,轻松地进行测试,线。