linux – tmux や screen を使用して vim でモードを切り替える際に若干の遅延が発生する

gnome-terminal gnu-screen linux tmux vim

tmuxを使っているので、Vimのインサートモードの切り替えが瞬時にできなくなってしまいました。インサートモードでEscを押してから、実際にインサートモードを抜けるまでにかなりの時間がかかるようになりました。Escを押した後、他のキーを押した後はすぐに切り替わり、Escの後に押されたキーのコマンドが実行されます。何か原因があるのでしょうか?

Vim の設定は tmux の外で Vim を実行しても遅延が発生しないので問題ないのですが、これは何らかの形で tmux が関係しているのかもしれません。私は gnome-terminal を使っています

また、Escのキーバインドをtmuxで定義できないようですが、私の計画ではEscEscにバインドするつもりでした

bind Escape send-keys ^[

残念ながら、tmux の Esc に何かをバインドしてもうまくいかないようです。画面上でも同様の問題が発生します

  71  Ton van den Heuvel  2011-03-02


ベストアンサー

マニュアルページを見てみると、tmux にはこのためのオプションがあることがわかりました。~/.tmux.conf の以下は遅延の問題を修正しています

 set -sg escape-time 0

これを有効にするには、tmux サーバーを再起動するか、設定を再読み込みする必要があります。これを行うには、tmux プロンプトから source-file ~/.tmux.conf を発行してください

131  Ton van den Heuvel  2011-03-03


このページを見つけたときに、私が解決しようとしていた問題とは別の、しかし似たような問題があったので、この答えを探していて同じようにこのページを見つけた人の参考になればと思い、ここに投稿しておきます

問題: bashのviモードで、挿入モードからコマンドモードに切り替えるときに遅延が発生する

解決策。~/.inputrc ファイルに set keyseq-timeout n を追加し、n は 0 よりも大きい低い値を指定します。 n のデフォルトは 500ms で、これが遅延の原因となっています。ドキュメント こちら を参照してください

また、自分がどのモードにいるかを知りたい場合は、Dylan Cali’s fork of bashをチェックしてみてください

6  Kvass  2016-12-30


タイトルにScreenとあるように、GNU Screen内のEscapeキーの挙動を修正する方法を紹介します。(こちらから引用)

Add

maptimeout 5

.screenrcの設定ファイルに追加します

2  Twonky  2016-02-29


ESCで始まるマッピングを使用しているようです。ESCを押すと、vimは次のキーがマッピングのキーかどうかを確認するために待たなければなりません。もしそうでなければ、すぐに続けることができます

vim の設定はターミナル依存になることがあるので、tmux の外では起こらないということはあまり意味がありません。Vim は環境変数 $TERM をクエリして、その値に応じて異なる設定を選択することができます

gnome-terminal は $TERM 変数の値として xterm を使用し、tmux は screen を使用するので、私は $TERM 変数が screen と等しい場合にのみ使用される設定について、すべての vim 設定ファイルに目を通すことになるでしょう。私の推測では、システム上のいくつかの vim 設定ファイルが、ターミナルが screen のときに矢印キー (ESC 文字で始まるもの) を処理するためのマッピングを設定しているのではないかと思います

vimを起動する前にtmuxの$TERM変数を一時的に変更することでテストできます。シェルが bash の場合は、vim を as で呼び出してください

TERM=xterm vim

を tmux で実行してみて、問題が解決するかどうかを確認してみてください。しかし、tmux と xterm のターミナル機能に違いがあるかもしれませんし、いくつかの問題に遭遇するかもしれませんので、これを解決策として使うべきではありません

1  Jan Hlavacek  2011-03-02


タイトルとURLをコピーしました