web-dev-qa-db-ja.com

'O'コマンドを使用するたびにvimが1秒遅れるのはなぜですか(上の新しい行を開いて挿入します)?

ほとんどのコマンドを使用すると、すぐに有効になります。ただし、Oコマンドを使用すると、「O」が現在の文字を約1秒間置き換えた後、現在の文字が戻り、新しい行が挿入されて開かれます。

oコマンドではそのような問題はありません(新しい行を開くそして挿入します)。

違いが出る場合は、Ubuntu10.04のGnomeターミナルでvimからbashを使用しています。

26
Matthew

前に押されたキーがESCの場合、これはESC Oで始まるエスケープシーケンスを生成できるキーがあるためです。たとえば、カーソルキーモードによっては、上矢印キーがエスケープシーケンスESC OAを生成する場合があります。

部分的なエスケープシーケンスが検出された場合、vimは短いタイムアウトを待機して、端末タイプに定義されたエスケープシーケンスの1つに一致する別の文字が受信されたかどうかを確認します。そうでない場合は、文字を個別のキーストロークとして扱います。これをテストするには、行が開くのを待っている間に大文字のAを入力して、代わりに上矢印として扱われるかどうかを確認します。

これを制御するために使用できるいくつかのvim設定があります。 :set ttimeoutlen=100は、エスケープシーケンスのタイムアウトを100msに変更します。 :set noesckeysは、挿入モードのときにエスケープシーケンスを送信するキーの認識を完全に無効にします。また、vi互換モードでは、esckeysがオフになっているため、この問題は発生しません。そのため、vim -u NONE動作します。

27
mark4o