tmuxを使っているので、Vimのインサートモードの切り替えが瞬時にできなくなってしまいました。インサートモードでEscを押してから、実際にインサートモードを抜けるまでにかなりの時間がかかるようになりました。Escを押した後、他のキーを押した後はすぐに切り替わり、Escの後に押されたキーのコマンドが実行されます。何か原因があるのでしょうか?
Vim の設定は tmux の外で Vim を実行しても遅延が発生しないので問題ないのですが、これは何らかの形で tmux が関係しているのかもしれません。私は gnome-terminal を使っています
また、Escのキーバインドをtmuxで定義できないようですが、私の計画ではEscをEscにバインドするつもりでした
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