CUI環境を整備してて、neovimとかfish-shellでCtrl+Shift+VとかCtrl+3使いたかった話です。
結論
ファンクションキーの代用とすることにして、iTerm2の設定で^3で"^[[1;2R"(F15)を送るようにした。
経緯
不勉強ながらただそれぞれの設定にそう書けばいいんだろうと思ってたんだけど。そうじゃないんだね。
そもそもCtrl+なんとかっていうはASCIIに含まれてて、ターミナルからコントロールキーとアルファベットキーが別々に送られるわけじゃない。ただ1バイトでぽんって送られる。
なんでASCIIにある範囲はいいけど、ない奴、Ctrl+3とかは何を送るかっていうのが自明じゃない。
んで1バイトに収まらない情報はエスケープコード(\e, ^[, \x1b, \033などで表される)に連ねて送るっていうルールがある。エスケープシーケンス。
それでもCtrl+3をエスケープシーケンスでどう送るかっていうルールはないんだけど、ファンクションキーはエスケープシーケンスでどう送るっていうコンセンサスがある。
infocmp xterm-256color
なんかでも見れる。
なのでCtrl+3とかはF15キーとして振る舞うようにiTerm2に設定することにした。
設定
iTerm2の設定>Profiles>どれか>KeysのKey Mappingsで^3(Ctrl+3)の設定でActionを”Send Escape Sequence"に、Esc+を"[1;2R"
これでiTerm2から"^[[1;2R"が送られるようになった。
あとはこのシーケンスがF15であるとして共通に理解できるように各環境を設定する。
iTerm2のTerminal typeをxterm-256color
config.fishでset -x TERM xterm-256color
.tmux.confでsetw -g xterm-keys on
あたり。
これでneovimとかfishでCtrl+3(F15)が使えるようになった。ただ、fishはF21以上は使えないっぽい(ソース見たらわざわざコメントアウトしてあった)