tmuxまたはscreenを使用してvimでモードを切り替えるときのわずかな遅延


68

tmuxを使用しているため、Vimでの挿入モードの切り替えは瞬時に行われなくなりました。Esc挿入モードで押した後、実際に挿入モードから抜け出すにはかなりの時間がかかります。押してEscから他のキーを押すと、スイッチは即座に動作し、その後押したキーのコマンドEscが実行されます。何がこれを引き起こす可能性がありますか?

tmuxの外部でVimを実行すると遅延が発生しないため、Vimの構成は問題になりません。したがって、これはおそらくtmuxに何らかの関係があります。gnome-terminal btwを使用します。

また、注目に値する、それは私がのためにtmuxの中でキーバインドを定義することはできませんようでEsc、私の計画は、バインドしたEscに:

bind Escape send-keys ^[

残念ながら、Esctmuxに何をバインドしても機能しないようです。同じ問題が画面でも発生します。

回答:


122

マニュアルページを調べてみると、tmuxにはこのオプションがあります。~/.tmux.conf遅延の問題は次のように修正されます。

 set -sg escape-time 0

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


2
これはどこで見つけましたか?でエスケープ時間を見つけることができずman tmux、コマンドが機能しません。
djeikyb

私は、開発版でのみ利用可能だと思います。ここから入手できます:github.com/ThomasAdam/tmux
トンヴァンデン

5
この設定が機能する前に、tmux kill-serverを使用する必要がありました。ありがとう!
サム

1
これにより、私はあなたに10の賛成票を与えることができたらいいのにと思う。vimでの1時間のバトルタイムアウトの後にこれを見つけました。ありがとうございました!
malvim

1
@MichaelBrown、私もそうですが、まだこの問題にぶつかります。エスケープまたは^ [を押すかどうかに関係なく、同じキーコードがターミナルエミュレータに送信されるため、実際には問題になりません。
トンヴァンデンヒューベル

4

このページを見つけたときに解決しようとしていた別の似たような問題があったので、この答えを探している他の人に役立ち、同じようにこのページを見つけた場合にそれをここに投稿します。

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

解決策:あなたは~/.inputrc、ファイルの追加、set keyseq-timeout nどこnいくつかの低値0よりも大きい n500msのデフォルト、遅延を引き起こすものです。こちらのドキュメントをご覧ください

また、どのモードにいるかを知りたい場合は、ディランカリのフォークのフォークをチェックしてください。


これは非常に便利です。設定して0.01、今ではずっと速くなりました。ありがとう!

/etc/inputrcすべてのユーザーが使用できるように追加することもできます。

1

で始まるマッピングを使用しているようですESC。を押すとESC、vimは次のキーがマッピング内にあるかどうかを確認するために待機する必要があります。そうでない場合は、すぐに続行できます。

vim設定は端末に依存する可能性があるため、tmuxの外部で発生しないという事実はあまり意味がありません。Vimは$TERM環境変数を照会し、その値に応じて異なる構成を選択できます。

gnome-terminalは変数xtermの値としてAFAIKを使用し、$TERMtmuxはを使用screenするため、$TERM変数がに等しい場合にのみ使用される設定について、すべてのvim構成ファイルを調べますscreen。私の推測では、あなたのシステム上でいくつかのvimの設定ファイルは、(それらがで始まり、矢印キーを処理するためのマッピングを設定していることであるESC文字)端末であるときscreen

$TERMvimを起動する前にtmux の変数を一時的に変更することでテストできます。シェルがbashの場合、vimを次のように呼び出します

TERM=xterm vim

tmuxで問題が解決するかどうかを確認します。ただし、tmuxとxtermの端末機能に違いがある可能性があり、いくつかの問題が発生する可能性があるため、修正として使用しないでください。


ここにいくつかの良い指針があります。私はbashを使用しますが、残念ながらTERM=xterm vim問題は解決しませんでした。もう少し掘り下げなければなりません。
トンヴァンデンヒューベル

1

タイトルがScreenに言及しているように、ここにGNU Screen内のEscapeキーの動作を修正するソリューションがあります。(こちらからご覧ください。)

追加

maptimeout 5

.screenrc設定ファイル。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.