俺はvim勢なので、Windows上のエディタはKaoriYa版gvimを使っている。
gvimを多重起動したくないので、singleton.vimを入れている。
で、Thunderbirdのメールをgvimで編集したいので、アドオン"External Editor"を入れてみた。
この2つの相性が悪く、うまく動かなかったので、状況をメモしておく。
External Editorとは
Thunderbirdのメール作成を外部エディタで行うためのアドオン。Thunderbirdのメール編集画面でCtrl+Eを押下すると、External Editorは%temp%内に"ContaindTemp"というフォルダを作って、その中に一時ファイルを作り、所定のエディタで開く。同時に、Thunderbirdの操作にロックがかかる。一時ファイルを編集しエディタを閉じると、Thunderbirdに編集内容が取り込まれ、Thunderbirdの操作ロックが解除される仕組み。
singleton.vimとExternal Editorを組み合わせるための設定は?
上述の動きは、singleton.vim作者のページに記述されている
世の中には、一時ファイルをテキストエディタで開いて終了を待つことでインタラクティブなインターフェースを提供するタイプのアプリがある。
に合致する。そのため、.vimrcにて g:singleton#entrust_pattern という変数を設定し、リモート編集を有効にする必要がある(リモート編集機能を使わないと、gvimにて一時ファイルのバッファを閉じてもExternal Editorがgvimの終了を検知できないため)。
entrust_patternを設定してみたが、うまく動かない
というわけで、.vimrcにlet g:singleton#entrust_pattern={'ExternalEditor': 'ContainedTemp'}と記述したのだが、これが期待通りの動作をしてくれない。
具体的にどのような現象が起こるかというと、エディタで一時ファイルを開いた直後、なぜか即座にThunderbirdが「エディタが終了した」と検知してしまうらしい(Thunderbirdの操作ロックが一瞬で解除される)。従って、その後エディタで一生懸命一時ファイルを編集しても、それがThunderbirdに反映されることはない。
g:singleton#entrust_pattern を設定してもしなくても動作は変わらず、上記の動きをしてしまう。
どうやって解決すればよい?
本件、2016年1月12日現在は未解決のまま。仕方がないので、
let g:singleton#ignore_pattern={'ExternalEditor': 'ContainedTemp'}と記述して、External Editorの一時ファイルは別のgvimウインドウを起動するようにして対処している。
まったく美しくない解決策(ただ問題から逃げているだけ)なので、何とかしたいところだが、作者ページに
getchar()で若干無理矢理やってる。
という記述があるので、多分処理がLinux用になってて、Windows版gvimではうまく動かないのだと思う。うーん。追記
この問題、singleton.vim作者さんも認識済みですね。Read older messages (February 12, 2013) - Lingr
Windows で singleton.vim の entrust 機能を使うとなぜかクライアント側が突然の死を遂げる
会話の流れを見る限り、gvimのfork処理がWindows版にはそもそも入っていないという結論? これは、gvim自体を大幅に改修する以外に解決策がないですね…。
0 コメント:
コメントを投稿