如果我在 zsh 提示符下并且我有当前的“上下文”(部分完成的命令行命令)
% man gr_
^ here I have used _ to represent the cursor
Run Code Online (Sandbox Code Playgroud)
如果我然后调用该_complete_help
函数CtrlXh
它告诉我上下文是
% man gr_
tags in context :completion::complete:man::
manuals (_man)
Run Code Online (Sandbox Code Playgroud)
如果我正确阅读了这个输出——我可以看到有一个完整的函数_man
能够列出所有已知的手册页——如果我此时按下Tab键,它将被调用。
我的问题是,我可以_man
手动调用完成函数吗?而不是_man
被 compsys 调用(它本身被调用Tab)?
我尝试使用 zle minibuffer <Esc>x
,然后输入,_man<Enter>
但我认为 mini-buffer 只能理解 zle 命令,不能执行一般功能。
我发现它对于简单的完成函数是可能且可用的,但是因为这个特定的函数_man
做了一些解析和验证工作,所以当在其预期上下文之外调用时它会生成错误。
以下是我将_man
完成函数绑定到组合键的操作,以便可以手动调用它。
定义一个包装函数来设置所需的选项。
_man_autonomous () {
eval $_comp_setup
_man "$@"
}
Run Code Online (Sandbox Code Playgroud)
使用行编辑器注册一个新的小部件:
zle -C complete-man expand-or-complete _man_autonomous
Run Code Online (Sandbox Code Playgroud)
将小部件绑定到Ctrl+T
bindkey '^T' complete-man
Run Code Online (Sandbox Code Playgroud)