Vimがしばらく停止します。

Vimがしばらく停止します。

vimで作業するとき(しばしば)1〜2秒ほど停止し、再び正常に戻り、停止中に入力したすべての内容を実行します。

新しくインストールした後、2つの異なるUbuntuシステムでこの動作を確認しました。追加のプラグインもなく、カラフルな設定もありません。

どんなアイデアがありますか?

答え1

確実にする自動読み取り機能が無効になっています。これにより、お客様が説明したものと同様の一時停止が発生する可能性があります。

ファイルが編集されるディレクトリ以外のディレクトリに.swpファイルを配置することもできます。 vimでファイルを開いて編集する前に、以下を実行してください。

:set dir=/tmp
:vi

これがうまくいけば、デフォルトの.swpファイルの場所に追加して修正できます。~/.vimrc

set dir=/tmp

答え2

私は、vimがfsyncを呼び出してデータの損失を防ぐためにディスクに書き込まれたデータがキャッシュされないようにするときに停止します。状況を改善するためのオプション:

  • 待ち時間が短いより良いHDを購入してください。
  • 待ち時間を隠すために非同期IOまたはIOスレッドを使用するようにvimを修正しました。

あなたの問題がfsyncにあるかどうかわかりません。 ftraceで確認できます。

履歴追跡:

  1. ランニング:

    sudo trace-cmd record -e syscalls:* -f "common_pid==<pid of vim>" \
      -e sched:sched_switch -e sched:sched_wakeup -s 1000000
    
  2. 凍結を再現
  3. 録音を停止するには、Ctrl-cを使用してください。

分析する:

  1. ランニング:

    trace-cmd report -F "syscalls : common_pid == <pid of vim>" | sed 's/://' \
     | awk '{time = 0; if ($4 == "sys_exit:") time=$3-prev_time; prev_time=$3; \
     printf "%6.6f %6.6f %s %s %s %s %s\n", time, $3, $4, $5, $6, $7, $8}' \
     | sort -n
    
  2. リストに示すように、selectまたはpollを除くすべてのシステムコールは短いです。 「kernelshark」GUIを使用して、問題のあるシステムコール中に何が起こっているのかを調べることができます。 awk出力の2番目の列は、トレースのシステム呼び出しの終わりと一致するタイムスタンプです。

カーネルはCONFIG_FTRACE_SYSCALLSでコンパイルする必要があります。 Ubuntuではこの機能が有効になっていますが、他の一部のディストリビューションではこの機能が不足している可能性があります。

関連情報