ESCキーにより、Alt +の動作により端末でわずかな遅延が発生します


67

私の端末設定は、viバインディングを備えたgnome-terminal + tmux + zshです。

vimのようなアプリケーションやzshのコマンドラインvi編集モードでも、ESCキーを頻繁に押す必要がありますが、このキーの効果が現れるまでに少し遅れがあります。参照してください。GNU画面が遅いVimのESCキーを作ります

いくつかの実験の後、ESCキーを押すとすぐに別のキー(たとえばb)を押すとを押すのと同じ効果があることがわかりましたAlt+b。なぜそうなのかはわかりません(おそらく、以前の理由でなかったのAltでしょうか?わかりません)。いずれにせよ、私は2つのAltキーを持っているので、ESCキーでこの動作をしたくありません。私も試してみC+[ましたが、同じ問題があります。

誰がこれを担当しているのか、gnome-terminal、tmux、または私のOS自体(Ubuntu Natty)はわかりません。これに対処する方法についてのアイデアは素晴らしいでしょう。

更新:別の端末(LXTerminal)でtmuxを使用せずにチェックすると、遅延も存在します。


1
私のvimが奇妙に振る舞う理由を理解できませんでした。この質問により、画面内で使用し始めたばかりだったことを思い出しました。あなたは私の正気を救った。
パボ

回答:


111

これが実際の修正です。以下を追加します.tmux.conf

set -s escape-time 0

4
素晴らしい、ありがとう!vimで挿入モードを離れるのに遅延があり、tmuxが干渉しているとは考えていませんでした。これはトリックでした
アクションシュリンプ

7
superuser.com/questions/252214/で述べたように、… tmux kill-serverこれを有効にするには、私がしなければなりませんでした。
PhilT

このページに
アクセスして

3
tmux-prefix(デフォルトCtrl+b)でtmux内のコマンドプロンプトを開き、続けて:を入力すると、構成ファイルをリロードできますsource-file $HOME/.tmux.conf
フォルフィー

7

遅延は、ファンクションキーが押されたかどうかを決定する必要がある入力ルーチンによって引き起こされます。このため、入力ルーチンは、ESC文字を読み込むたびにタイマーを開始します。タイマーが切れる前に入力から読み取られた文字(たとえば、10分の1秒)は、ファンクションキーのESCシーケンスとして解釈され、このESCシーケンスは、terminfoまたはtermcapデータベース(どの低レベルルーチンが使用されるかによって異なります)。

もちろん、これはESCが単独で使用されるアプリケーションにとっては面倒ですが、これに対する回避策は知りません。

ESC a= の動作に関する質問についてMeta a

メタキーはすべてのキーボードで使用できませんでした。回避策として、ESCキーを使用して他のキーの前に押すことがしばしば許可されました。


説明ktfをありがとう。遅延はgvimには存在せず、ターミナルにのみ存在します(tmuxを使用せずにチェックしたところ、遅延はまだ存在しています)。
シュリカントシャラット

gvimは、どのキーがX11サーバーから押されたかという情報を取得するため、この問題の影響を受けません(したがって、ESCシーケンスを解析する必要はありません)。
ktf

それでは、gnome-terminalを同じように動作させる必要があります。
シュリカントシャラット

gnome-terminalは問題ではありません-説明されている問題は、ターミナル(またはターミナルエミュレーション)で実行されているプログラムにのみ影響、ファンクションキーを解析する必要があります。たとえばxtermまたはKDE-Terminalを試してみると、同じ動作が発生します。
ktf

2
「すべてのキーボードでメタキーを使用できるわけではありませんでした。回避策として、ESCキーを使用して他のキーの前に押すことがしばしば許可されました。」おそらくそれよりも先に、ttyには7ビットのデータインターフェイスしかないことがよくありました。8番目の「メタビット」はなかったため、MetaのESCを送信する必要がありました。そして現在、UTF-8は広く普及しているため、8ビット接続であってもMetaに高ビットを使用することはできません。
クリスページ

3

これで問題が直接解決されるわけではありませんが<Ctrl> c、挿入モードを終了するために使用できることがわかりました。これは、tmuxの画面スクロールを終了するためにも使用できます(これはを使用して呼び出すことができます<leader> PgUP)。


3
いくつかのプラグインが監視しているかもしれないオートコマンドを<C-c>実行しないため、通常の使用で挿入モードを終了するために使用することはお勧めしませんInsertLeave。をご覧ください:h i_CTRL-C
シュリカントシャラット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.