Vim弹出菜单,就像omni自动完成弹出窗口一样

时间:2014-03-16 20:17:24

标签: vim

我正在制作一个Vim脚本。我想制作一个提供替代品的弹出窗口。它应该与Omni-popup相同,但不能替换字符串或通过omni函数。像这样:

enter image description here

我使用completefunc和自动命令事件CompleteDone来支持我需要的功能,只是为了获得弹出窗口。但它真的很丑陋和混乱,因为我没有用它来自动完成。

有没有办法使用这个弹出窗口,但完全控制,而不是通过全方位功能?就像用值填充它并接收选定的值一样?

我知道你可以把替代品放在另一个缓冲区中,然后从那里获取输入。但它扰乱了工作流程,我想要一个弹出窗口。

2 个答案:

答案 0 :(得分:2)

插入模式弹出菜单仅适用于完成,正如您已正确发现的那样。弹出菜单没有其他优先级作为Vim中的常规选择器,因此这样的功能不存在并且难以模拟。 (在GVIM中,可以填充鼠标右键弹出菜单,但这需要通过鼠标按键来触发。)

“Vim方式”将是:echo菜单项和查询列表(通过getchar()input()),或者只使用confirm()或{{1 }}。 Vim内置的示例是inputlist()中的查询。

插件通常使用拆分暂存缓冲区来构建更精细的菜单;这甚至可以与:tselect结合使用,因为无论如何都会丢弃暂存缓冲区中的任何文本条目。

FuzzyFinder - buffer/file/command/tag/etc explorer插件使用此功能,甚至为自定义用途提供API,cp。 'completefunc'。这当然值得一看,虽然菜单仍然位于顶部,而不是在当前缓冲区内。

答案 1 :(得分:0)

这些中的任何一个都能做到你想要的吗?

:help inputdialog()
:help inputlist()