VimScriptの組み込み関数に、入力されたキーを取得するgetchar()という関数があります。この関数は引数を省略すると、何かキーが入力されるまで待機しますが、引数に0を与えると待機せず、キーが入力されなかった場合は0を返します。
私はこの0を与えた時の機能を用いて、ループ内でユーザの入力を監視する処理を書きました。結果、概ね上手く動いたのですが、ある特定のタイミングでその関数がキー入力待ちになってしまうことが分かりました。しかし、未だ原因を特定するまでには至っていません。Web上で調べてみても、このような前例は見つかりませんでした。この原因、またはそれを特定するための手掛かりになりそうな情報でも構いませんので、どなたか教えて頂けないでしょうか。
ループ内の処理は、おおよそ以下のようになっています。
VimScript
1silent %d _ "バッファをクリアする 2call setline(1,list) 3redraw 4let key = nr2char(getchar(0)) 5"ここでユーザの入力に基づいた処理を行う 6sleep 50m
そして、次のようなタイミングでキー入力待ちになってしまうことが分かっています。
0. ループに入った直後
- 上記の変数listの値を変更することで画面を大きく変更した直後
- ループに入ってからconfirm()で表示したダイアログを消した直後
あなたの回答
tips
プレビュー