hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

続 iTerm2でHexコードを送ってfishでCmd+[とCmd+]をディレクトリの戻る進むに対応させる

概要

以前の記事でfishのbindを利用して対応しました。 このbindによってペーストが壊れてしまい対応が難しいとわかったので
別の方法でiTerm2を使って対応しました。

経緯

[github.com

ここで貼り付けた文字列が壊れると質問したのですが

bind \e\[ 'do something'

がbindで設定を禁止させるべきかもと回答を頂きました。

現状では設定しなのがよいとのことなので、
fishで既にprevd-or-backward-wordがbindされているキーを
iTerm2で入力したCmd+[と]を別のキーとして入力することにしてみました。

設定

fishのbind確認

fishでnextd-or-forward-wordがbindされているキーを確認してみましょう。

$ bind --key | grep nextd-or-forward-word
bind --preset \e\eOC nextd-or-forward-word
bind --preset \e\e\[C nextd-or-forward-word
bind --preset \eO3C nextd-or-forward-word
bind --preset \e\[3C nextd-or-forward-word
bind --preset \e\[1\;3C nextd-or-forward-word
bind --preset \e\[1\;9C nextd-or-forward-word

次にprevd-or-backward-wordを確認します。

$ bind --key | grep prevd-or-backward-word
bind --preset \e\eOD prevd-or-backward-word
bind --preset \e\e\[D prevd-or-backward-word
bind --preset \eO3D prevd-or-backward-word
bind --preset \e\[3D prevd-or-backward-word
bind --preset \e\[1\;3D prevd-or-backward-word
bind --preset \e\[1\;9D prevd-or-backward-word

今回はAlt+←と→でディレクトリの行き来ができるとわかったので活用したいと思います。 Alt+← が \e[1\;3D で Alt+→ が \e[1\;3C です。

これを踏まえてiTerm2の設定を行います。

いくつか設定されていますが、このままだと何が設定されているのかよくわからない状態です。

iTerm2の設定

Cmd+[と]は他のキーに割り当ててもよいので
既にバインドされているキーに割り当ててしまいましょう。
iTerm2のPreferencesからProfilesのタブを選択して
Keysのタブを選択します。ここまでは以前と同じです。

fishにはbindするキーを確認するコマンド fish_key_reader があります。

Alt+← を確認すると

$ fish_key_reader
Press a key

              hex:   1B  char: \c[  (or \e)
(  0.144 ms)  hex:   5B  char: [
(  0.084 ms)  hex:   31  char: 1
(  0.130 ms)  hex:   3B  char: ;
(  0.130 ms)  hex:   33  char: 3
(  0.077 ms)  hex:   44  char: D
bind \e\[1\;3D 'do something'

Alt+→を確認すると

$ fish_key_reader
Press a key

              hex:   1B  char: \c[  (or \e)
(  0.122 ms)  hex:   5B  char: [
(  0.118 ms)  hex:   31  char: 1
(  0.032 ms)  hex:   3B  char: ;
(  0.056 ms)  hex:   33  char: 3
(  0.159 ms)  hex:   43  char: C
bind \e\[1\;3C 'do something'

1B 5B 31 3B 33 44
1B 5B 31 3B 33 43

だとわかるのでiTerm2に設定します。

f:id:hotoolong:20200407000434p:plain
keys_settting
こんな感じです。

まとめ

これらの設定で対応ディレクトリ移動が少し快適になりました。
fishで今後 "\e[" のbindは禁止されるかもしれませんが
いい方法で解決してくれると嬉しいです。

参考URL

対話型コンソールアプリ制作初級者に教えたい「CSI」 - Qiita

ASCII Table