ggdG:wq

個人的なメモとか書いてます。

Commandキーをtmuxのプレフィックスキーとして使う on Iterm2

tmuxのプレフィックスキーに最適なキーを探して数年が経ちました。
Vimのキーマップやターミナルのショートカットを考慮するとプレフィックスキーとして使える組み合わせってほぼ残って無いです。
(デフォルトのCtrl+bとか、shellでめっちゃ多用します)

なので色々な組み合わせを試してきたんですが、最近MacだったらCommandキーをプレフィックスキーとして使えば良いのでは?
と考えて設定してみたら結構いい感じです。
「Commandキー+何かのキー」をプレフィックスキーとして使うメリットとしては

  • 押しやすい位置にある
  • ターミナルで動くツール(vim, bash, 他CLIツール類)とショートカットでバッティングすることが無い(多分)

とかが挙がります。
親指で押せる位置にあるというのは、ターミナルで生活する者としては結構重要です。
小指とかで押すCtrl等をプレフィックスキーとして使用すると小指が死んでしまいます。
Commandキー単押しでプレフィックスキーとして動作させることも可能ですし、 Commandキー + ' を tmuxのpane分割キーとして設定すること等も可能です。 (これも結構メリット)

前提

  • 下記環境で動作確認を行っています。
    • macOS Catalina バージョン 10.15.5
    • iTerm2 Build 3.3.11
    • tmux 3.0a

設定方法

Iterm2にはキーボードショートカットを自分で登録する機能が最初からついてます。
ショートカットを入力した際に色々なアクション(スクロールとかコピー等)を実行できるのですが、そんなアクションの中に "Send Hex Code" というアクションがあります。その名の通りショートカットを入力した際にASCIIコードを送信してくれる機能です。
こいつを利用して、Commandキーを入力した際にtmuxのプレフィックスキーとして設定したキーのASCIIコードを送信してもらいます。

どのキーがASCIIコードの16進数で何に該当するのかは下記サイトとかみると分かります。

ASCIIコード表: https://ja.wikipedia.org/wiki/ASCII

tmux側の設定

実はtmuxのprefix設定が何でも良いわけじゃないです。(ここが若干デメリット)
tmux的には Ctrl-<Space> をプレフィックスキーとして使うことが出来るのですが、
上記 "send Hex Code" の機能としては上記ASCIIコード表に載っているような文字もしくは制御文字しか対応していません。

なので普段使わなさそうな制御文字をプレフィックスキーとして利用します。
ASCIIコードの制御文字とその説明はWikipediaみると概要は分かるかと思います。

Wikipedia 制御文字: https://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E6%96%87%E5%AD%97

私は Ctrl + \ をtmuxのプレフィックスキーとして設定しました。 (制御文字としては File Separator だそうです。)

.tmux.conf の設定として書くなら下記のようになります。(エスケープするためにバッククォートが2つついてます。)

# prefix key
set -g prefix C-\\

Iterm2側の設定

次にIterm2側の設定です。 Iterm2のPreferencesから設定します。(Preferencesの開き方はCommandキー + ,)
Preferences > Keys > Key Bindings の左下の + ボタンからキーボードショートカットを新しく登録します。

私の設定を例にすると、

  1. Preferences > Keys > Key Bindings の左下の + ボタンを押す
  2. Commandキーの単押しをプレフィックスキーとして使いたいので、 "Keyboard Shortcut" のところをクリックして Commandキーを押す
  3. Actionで "Send Hex Code" を選択する
  4. Actionの下に入力欄が出るので、そこに先程プレフィックスキーとして設定した制御文字のASCIIコードを入力する
    • (私はFile Separatorをプレフィックスキーとして設定したので、そのASCIIコードである 1c を入力します)

上記設定ができれば下記画像のようになるはずです。

Commandキーをプレフィックスキーとして設定できたときの画像
Commandキーをプレフィックスキーとして設定できたときの画像

ここまでで Commandキーをプレフィックスキーとして利用できます。動作確認して終わりです。お疲れさまでした。

おまけ

ここまでの設定の応用として、Commandキー + ' をプレフィックスキーを押したあとで ' キーを押したと同様の動作(tmuxのデフォルト設定だとpaneの分割) をするようにしてみます。

  1. Preferences > Keys > Key Bindings の左下の + ボタンを押す
  2. Commandキー + 'をプレフィックスキーとして使いたいので、 "Keyboard Shortcut" のところをクリックして Commandキーを押す
  3. Actionで "Send Hex Code" を選択する
  4. Actionの下に入力欄が出るので、そこに先程プレフィックスキーとして設定した制御文字のASCIIコードを入力し、半角スペースを入れて ' キーのASCIIコード(22) を入力します。
    • (私はFile Separatorをプレフィックスキーとして設定したので、そのASCIIコードである 1c を入力します)

これで Commandキー + ' をpane分割のショートカットとして登録できました。
この調子でよく使うtmuxの操作をショートカットとして登録すると便利です。私の設定は現在下記画像の様になっていました。

色々設定できたときの画像
色々設定できたときの画像

Commandキーをプレフィックスキーとして利用すると小指に優しいのでおすすめです。
良かったらぜひ試してみて下さいませ。