![为什么 .gvimrc 和命令行的弹出对话框有区别?](https://linux22.com/image/1402289/%E4%B8%BA%E4%BB%80%E4%B9%88%20.gvimrc%20%E5%92%8C%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%9A%84%E5%BC%B9%E5%87%BA%E5%AF%B9%E8%AF%9D%E6%A1%86%E6%9C%89%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
我正在使用 gVim 的confirm()
功能弹出一个对话框,等待用户单击按钮。但是,从以下位置调用时对话框的外观似乎有所不同.gvimrc
:
使用命令::let MyTestV = confirm("IN MY_GVIMRC")
生成以下对话框:
当在文件(以及文件):
中添加此行 (不带) 时,打开新的 gVim 时会出现以下内容:.gvimrc
.vimrc
请注意,对话框在实际的 gVim 窗口出现在屏幕上之前出现。
1)为什么两个对话框的外观有差异?
2)我应该把命令放在哪里以便对话框按预期出现?
答案1
我怀疑这是典型的“竞争条件”类错误的变体。启动非 GUI 版本的 Vim 并运行命令confirm()
,您将看到额外文本来自何处。基本上,Vim 将非 GUIconfirm()
文本放入 GUI 弹出窗口中,因为在您运行时.vimrc
GUI 实际上尚未可用。
我建议您bugs
向vim.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
来触发它。