问题描述
当我们运行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
函数,可以非常快速,轻松地进行测试,线。