![使用键绑定进行任意 zsh 补全](https://linux22.com/image/1336346/%E4%BD%BF%E7%94%A8%E9%94%AE%E7%BB%91%E5%AE%9A%E8%BF%9B%E8%A1%8C%E4%BB%BB%E6%84%8F%20zsh%20%E8%A1%A5%E5%85%A8.png)
有时命令没有安装补全功能——或者语法上可以接受一大堆类型的参数,导致补全几乎毫无用处。例如,“git checkout”可以采用任何 git 跟踪文件的名称或者任何 ref 或其他 tree-ish 的名称。它还可以采用一些选项标志。有很多可能的完成。
知道我想要完成(比如说)一个分支名称,有没有办法绑定一个键来完成或显示分支名称的菜单? (对于任何完成类别同样如此。)
这似乎是可行且有用的,但我还没有看到过这样的做法。
答案1
是的,可以这样做。我最初从一个 zsh 邮件列表中获得了以下内容,但我不记得是谁发布的:
zle -C complete-file complete-word _generic
zstyle ':completion:complete-file::::' completer _files
bindkey '^x^f' complete-file
这可以很容易地适应使用不同的完成功能而不是_files
。
第一行定义了一个新的完成小部件,complete-file
其行为类似于内置complete-word
小部件,并使用该_generic
函数生成完成列表。
然后第二行对其进行配置,以便当使用该自定义小部件时,完成器将仅用于_files
获取完成列表。
然后第三行将新的小部件绑定到一个键序列。