我正在制作一个Vim脚本。我想制作一个提供替代品的弹出窗口。它应该与Omni-popup相同,但不能替换字符串或通过omni函数。像这样:
我使用completefunc
和自动命令事件CompleteDone
来支持我需要的功能,只是为了获得弹出窗口。但它真的很丑陋和混乱,因为我没有用它来自动完成。
有没有办法使用这个弹出窗口,但完全控制,而不是通过全方位功能?就像用值填充它并接收选定的值一样?
我知道你可以把替代品放在另一个缓冲区中,然后从那里获取输入。但它扰乱了工作流程,我想要一个弹出窗口。
答案 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()