.gvimrc とコマンド ラインのポップアップ ダイアログに違いがあるのはなぜですか?

.gvimrc とコマンド ラインのポップアップ ダイアログに違いがあるのはなぜですか?

私は gVim のconfirm()機能を使用して、ユーザーがボタンをクリックするのを待つダイアログをポップアップしています。ただし、次の呼び出しの場合、ダイアログの外観が異なるようです.gvimrc

次のコマンドを使用すると、:let MyTestV = confirm("IN MY_GVIMRC")次のダイアログが生成されます。

ここに画像の説明を入力してください

この行 ( なし) が( も) ファイル:に追加されると、新しい gVim を開いたときに次のように表示されます。.gvimrc.vimrc

ここに画像の説明を入力してください

実際の gVim ウィンドウが画面に表示される前にダイアログが表示されることに注意してください。

1) 2 つのダイアログの外観に違いがあるのはなぜですか?

2) ダイアログが期待どおりに表示されるようにするには、コマンドをどこに配置すればよいですか?

答え1

これは典型的な「競合状態」クラスのバグの一種ではないかと考えています。非 GUI バージョンの Vim を起動してconfirm()コマンドを実行すると、余分なテキストがどこから来るのかがわかります。基本的に、Vim は実行confirm()時に.vimrcGUI がまだ実際には利用できないため、非 GUI テキストを GUI ポップアップに表示しています。

bugsこの件について報告するには、(スパムボットの速度を低下させるためにアドレスを少し難読化しています)に電子メールを送信することをお勧めしますvim.org。この SuperUser の質問にリンクすることもできます。

編集:この問題は私が予想していたよりもさらにひどいです。再現できるかどうか確認しようと思い、次のコマンドを に入力しました.vimrc:

echo confirm('test')

私もあなたと同じ結果になりましたが1confirm() 関数の戻り値で構成される追加行が追加されました。ここでは何かが間違いなく間違っています。

編集2:ダイアログの遅延がconfirm()問題にならない場合は、代わりに次の操作を実行できます。

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

答え2

~/.vimrc未定義の動作が発生していると思います。GUIがまだ適切に初期化されていないため、ユーザーと対話する関数は から実行されるはずがありません。 には:help input()警告が含まれています:

注意: GUI モードでのみ実行されるバージョン (Win32 GUI など) の場合、この関数はスタートアップ ファイルで使用しないでください。

起動直後にユーザーに何かを問い合わせる必要がある場合は、 を使用して:autocmd VimEnterそれをトリガーします。

関連情報