読者です 読者をやめる 読者になる 読者になる

私をペロペロするがよい

lazy_dog のブログです。

ターミナルでのキー入力最速計画

あらすじ

「なんかターミナルのキー入力が遅い気がする。」 蝉のように命は儚い。一瞬の無駄なディレイも、エンジニアには尊い時間なのだ。ストレスも塵も積れば人は死ぬ。

あらすじで言いたかったこと

本エントリーでは、ターミナルのキー入力環境を改善し、ストレスがないターミナル環境を構築するまでに至る経緯を記載する。なお、設定や dotfiles を調整し、バイナリは弄らない (弄れない) という方針。

環境

というよくある構成。

やったこと

iTerm2 から Terminal.app への乗り換え

なんか iTerm2 の描画が遅いなあ、と感じた。 Terminal.app の場合、少々つっかかりはあるものの描画はそこそこヌルヌルと悪くない感じだったが、iTerm はつっかかりがある感じ。文字の入力に描画が追いついていないようだった。 iTerm2 がいいところって

  • タブウインドウ
  • ACSII 文字とは別に 2 バイト文字のフォントを別途選択可能。
  • なんか細かく設定できるっぽい。

くらいしかなく、必要最低限機能が揃っている Terminal.app でなんら問題はなかった。 これにより、「なんか描画遅い」というストレスが解決した。

Karabiner でキーリピートの間隔を調整

Windows マシンでもやっているように、キーリピートの間隔を調整した。これは、Karabiner の "Key Repeat" タブから設定ができる。 現在、"Delay until repeat" は 225 ms で "Key repeat" を 15 にしている。 これがすこぶる快適で、キータッチが軽くなったような印象を受ける。 キーのリピート間隔と、リピートが始まるまでのディレイを調節する機能なので、カーソル移動や BS を押し続けている際、恩恵がある。

.zshrc に KEYTIMEOUT=0 の行を追加する

おいらは vi キーバインドを使用しているので、ESC キーは多用する。ESC キーを押す際、何かつっかかりがあってストレスだった。具体的には、ESC を押した際、画面が微妙に固まるような動きをする。 それもそのはず、デフォルトでは 10ms のディレイが発生しているらしい。

15.6 Parameters Used By The Shell http://zsh.sourceforge.net/Doc/Release/Parameters.html#Parameters-Used-By-The-Shell-1

KEYTIMEOUT The time the shell waits, in hundredths of seconds, for another key to be pressed when reading bound multi-character sequences.

このディレイを 0 にしてあげれば、ESC を押したときのストレスが軽減されるはず。

.zshrc

KEYTIMEOUT=0

tmux や vim にも

tmux の場合、

http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1?query=tmux&sec=1 escape-time time Set the time in milliseconds for which tmux waits after an escape is input to determine if it is part of a function or meta key sequences. The default is 500 milliseconds.

というように、ESC を押した後に特定のキーを押すまでにウェイトがかかるようだ。デフォルトでは 500ms。 ただし、この設定を 0 にしても個人的には体感できる実感はなく。。。記載の通り、"function or meta key sequences" のキーを押すような人には恩恵があるのかもしれない。 vim にも set timeoutlen= という設定があるが、tmux と同様に、モードの切り替えのタイミングなど特に遅いと実感することもなく、現状デフォルトのまま。

まとめ

こう書いてみると大したことがない設定をしているようだけど、実際、設定によりすごく快適になったので、万人に設定を是非見直してもらいたい。特に zsh の設定で KEYTIMEOUT の値を変更した際は、本当に感動した。今まで ESC を押したとき遅いなあ、と感じていたことが、キー入力に吸い付くようにターミナルの描画されるように感じたときは嬉しかった。