
我正在使用 gVim 的confirm()
功能彈出一個對話框等待用戶單擊按鈕。但是,從以下位置呼叫時,對話方塊的外觀似乎有所不同.gvimrc
:
使用命令::let MyTestV = confirm("IN MY_GVIMRC")
產生以下對話框:
當此行(不含:
)新增至.gvimrc
(以及.vimrc
)檔案時,開啟新的 gVim 時會出現以下內容:
請注意,該對話方塊出現在實際 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
來觸發它。