我发现 zsh 的Tab完成结果列表非常有用,但是我想稍微调整一下它们的行为:
它们应该在我Tab第一次出现时出现,然后随着每个新字母的添加而动态更新。默认行为是,仅当您Tab再次“我想保存此重复的按键”时,才会重新评估建议。 (更新:但只列出可能的完成,即使只剩下一个选项,它也不应该自动修改我的实际提示行。)
有什么办法可以实现这种行为吗?
答案1
我创建了一个插件,它完全可以满足您的要求:https://github.com/marlonrichert/zsh-autocomplete
当您键入时,它会自动列出完成选项,无需插入它们,也无需按任何其他键盘快捷键。无需按 ctrl-x+i 或 ctrl-d 或类似的键。只要屏幕适合,它就会始终自动列出所有内容。
然后,按 Tab 插入顶部匹配或按 Down 开始菜单选择。
您可以观看上面页面上的演示,看看它是否是您想要的。
答案2
可能提供您想要的解决方案的一种方法是incremental-complete-word
:
zle -N incremental-complete-word
bindkey '^Xi' incremental-complete-word
这会加载该函数并将其绑定到Ctrl- X i。现在你可以尝试一下:
> k^Xi
incremental (complete): -no prefix-
k
在此示例中,先键入字母,然后键入 Control-X i。
> kil
incremental (complete): kill
我输入后il
,现在有一种可能的补全 ( kill
)。人们可以接受这一点并按回车键。
> kill^D
incremental (complete): -no prefix-
- external command -
kill killall killall5
通过输入Ctrl- Dzsh 会显示可能的完成情况。
从zshcontrib(1)
:
增量完整词
这允许增量完成一个单词。启动此命令后,您键入的每个字符后都会显示补全选项列表,您可以使用^H或删除它DEL。按回车键接受到目前为止的完成并返回到正常编辑(即,命令行不会立即执行)。您可以点击TAB以正常完成、 ^G 中止回到开始时的状态以及^D列出匹配项。