MacVimが他の呼び出しごとに異なる方法で起動するのはなぜですか?


13

今日、MacBookでいくつかの作業をするために座ったとき、ある時点で私の.gvimrc設定に関して何かがおかしくなってきたことに気づきました:MacVimを起動したとき、ウィンドウが非常に小さい(ほぼデフォルトのサイズ) )。奇妙なことに、verbose set columns?ウィンドウの幅が明らかに 180列ではないのに、「180、〜/ .gvimrcからの最後のセット」を教えてくれました。set columns=180ウィンドウを予想された幅に復元しました。

RCファイルの通常のデバッグと二分割の後、異常なことに気付きました。これが私の列のサイズが適用されていないかどうかに関係なく、どちらにせよ、それが好奇心が強く、私はそれを理解することができません。

を実行するとmvim -u NONE -c "set columns=100"、次のようなウィンドウが表示されます。 mvim 1

まったく同じコマンドを再度実行すると、次のようになります。 mvim 2

verbose set co?どちらの場合も、「-c引数からの最後のセット」と言って、それぞれ100と66を報告します。起動コマンドを繰り返すと、ウィンドウの状態が交互に変わります。

.viminfo実行と実行の間にヌキングを試みました。効果はありません。

現在MacVimスナップショット74を使用していますが、以前のバージョンを使用していたので、これが発生し、バージョン管理の問題かどうかを確認するためにアップグレードしました。私は10.10.3にいますが、この動作はOSアップデートの結果として表面化したMacVim固有のバグが原因である可能性があります(最近発生した)。ただし、妻のラップトップ(同じOSバージョンを実行している)にMacVimをインストールすると、動作は再現されません。

私は迷っています。一体何がこの行動を引き起こしているのでしょうか?


編集:デバッグを続けた後、ラップトップに外部モニターを接続している場合にのみこの方法を再現するように見えることに気付きました。これは、それが何らかのバグだと思うようになります。

回答:


16

MacVimのコードベースを数時間調べた後、これが起こる理由がわかると思います。

MacVimが起動すると、以前に保存したウィンドウの位置を読み取り、NSUserDefaultsその位置を復元しようとします。この時点では、ウィンドウは実際にはまだ表示されておらず、その起源は常に「メイン」画面にある(おそらくOSが選択された)デフォルトです。窓の前の位置が異なるモニター上にあった場合は、変更に対応する「サイズが変更されます」イベントではないので、ウィンドウの位置は、10.10.3で、これは新しいものであることは可能ですか、バグ(「リサイズ」イベントをトリガします生成)。

これにより、MacVimはVimバックエンドのサイズを変更しようとしますが、そのサイズ変更を適切に構成するために使用される状態のプロセスの実行が早すぎます。したがって、MacVimは、Vimが実質的にデフォルト値になるようにVimのサイズを変更することを要求します。これにより、MacVimが次にVimバックエンドからサイズ変更に対する応答を受け取ると、ウィンドウが縮小します


編集: この変更はバグを修正すると思います。ウィンドウがリサイズされると、ウィンドウが表示されるまでVimバックエンドに伝播しません。


1
リンクが壊れていますが、これは面白そうだから残念です。(また:「スペランキング」という言葉の使用が大好きです。):D-
ワイルドカード

@Wildcardローカルブランチでのコミットの代わりに最終的に作成したPRを指すようにリンクを更新しました(MacVimのメインリポジトリへのコミットアクセスを得たときに削除しました)。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.