为什么 .gvimrc 和命令行的弹出对话框有区别?

为什么 .gvimrc 和命令行的弹出对话框有区别?

我正在使用 gVim 的confirm()功能弹出一个对话框,等待用户单击按钮。但是,从以下位置调用时对话框的外观似乎有所不同.gvimrc

使用命令::let MyTestV = confirm("IN MY_GVIMRC")生成以下对话框:

在此处输入图片描述

当在文件(以及文件):中添加此行 (不带) 时,打开新的 gVim 时会出现以下内容:.gvimrc.vimrc

在此处输入图片描述

请注意,对话框在实际的 gVim 窗口出现在屏幕上之前出现。

1)为什么两个对话框的外观有差异?

2)我应该把命令放在哪里以便对话框按预期出现?

答案1

我怀疑这是典型的“竞争条件”类错误的变体。启动非 GUI 版本的 Vim 并运行命令confirm(),您将看到额外文本来自何处。基本上,Vim 将非 GUIconfirm()文本放入 GUI 弹出窗口中,因为在您运行时.vimrcGUI 实际上尚未可用。

我建议您bugsvim.org(地址略微模糊以减慢垃圾邮件机器人的速度) 发送电子邮件,并报告此事。您甚至可以链接到此超级用户问题。

编辑:这个问题比我想象的还要严重。我决定看看能否重现这个问题,我将这个命令输入到我的.vimrc

echo confirm('test')

我得到了和你一样的结果,但是添加了一行,其中包含1了确认函数的返回值。这里肯定出了问题。

编辑二:如果延迟confirm()对话不是问题,您可以这样做:

autocmd VimEnter * let MyTestV = confirm("IN MY_GVIMRC")

答案2

我认为你遇到了未定义的行为;与用户交互的函数不应该从执行~/.vimrc,因为 GUI 尚未正确初始化。:help input()包含一个警告:

注意:对于仅在 GUI 模式下运行的版本(例如 Win32 GUI),该函数不能在启动文件中使用。

如果您需要在启动后立即向用户查询某些内容,请使用:autocmd VimEnter来触发它。

相关内容