為什麼 .gvimrc 和命令列的彈出對話框有差異?

為什麼 .gvimrc 和命令列的彈出對話框有差異?

我正在使用 gVim 的confirm()功能彈出一個對話框等待用戶單擊按鈕。但是,從以下位置呼叫時,對話方塊的外觀似乎有所不同.gvimrc

使用命令::let MyTestV = confirm("IN MY_GVIMRC")產生以下對話框:

在此輸入影像描述

當此行(不含:)新增至.gvimrc(以及.vimrc)檔案時,開啟新的 gVim 時會出現以下內容:

在此輸入影像描述

請注意,該對話方塊出現在實際 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來觸發它。

相關內容