質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

Q&A

0回答

596閲覧

getchar(0)が入力待ちになってしまう原因が知りたい

matonrin

総合スコア12

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

0グッド

0クリップ

投稿2018/08/18 02:43

VimScriptの組み込み関数に、入力されたキーを取得するgetchar()という関数があります。この関数は引数を省略すると、何かキーが入力されるまで待機しますが、引数に0を与えると待機せず、キーが入力されなかった場合は0を返します。

私はこの0を与えた時の機能を用いて、ループ内でユーザの入力を監視する処理を書きました。結果、概ね上手く動いたのですが、ある特定のタイミングでその関数がキー入力待ちになってしまうことが分かりました。しかし、未だ原因を特定するまでには至っていません。Web上で調べてみても、このような前例は見つかりませんでした。この原因、またはそれを特定するための手掛かりになりそうな情報でも構いませんので、どなたか教えて頂けないでしょうか。

ループ内の処理は、おおよそ以下のようになっています。

VimScript

1silent %d _ "バッファをクリアする 2call setline(1,list) 3redraw 4let key = nr2char(getchar(0)) 5"ここでユーザの入力に基づいた処理を行う 6sleep 50m

そして、次のようなタイミングでキー入力待ちになってしまうことが分かっています。
0. ループに入った直後

  1. 上記の変数listの値を変更することで画面を大きく変更した直後
  2. ループに入ってからconfirm()で表示したダイアログを消した直後

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問