Ghostty × tmux CmdキーだけでtmuxをChromeのように操作する設定テンプレート
tmuxは便利だけど、prefix + key の2ストロークが地味に煩わしい。Cmd+Tで新しいタブを開く感覚に慣れていると、毎回prefixを挟むのがもどかしくなる。
Ghosttyの keybind を使えば、Cmd+keyの1ストロークでtmuxの操作を実行できる。Chromeでタブを開くのと同じショートカットが、tmuxでもそのまま動く世界。
コピペで使えるテンプレートも用意した。
仕組み: Ghostty keybind → tmux prefix
Ghosttyの keybind は、キー入力をインターセプトしてエスケープシーケンスをターミナルに送る仕組み。これを利用して、Cmd+keyを「tmux prefix + コマンド」に変換する。
例えば、Cmd+Tで新しいtmuxウィンドウを開く設定はこう。
# Ghostty config
keybind = cmd+t=text:\x13\x03
この1行の中身を分解すると:
-
\x13= Ctrl+S = tmux prefix -
\x03= Ctrl+C = tmuxのbind C-c new-windowに対応
Ghosttyがキー入力をインターセプトし、エスケープシーケンスとしてtmuxに渡す。tmuxから見ると「prefix → コマンドキー」が高速で連続入力されたように見えるので、通常のキーバインドとして処理される。
Chrome/IDEライクな設定テンプレート
以下のテンプレートをGhosttyとtmuxの設定にコピペすれば、ブラウザやIDEと同じショートカットでtmuxを操作できる。
Ghostty側の設定
~/.config/ghostty/config に追加:
# --- tmux shortcuts ---
# 新ウィンドウ (Cmd+T)
keybind = cmd+t=text:\x13\x03
# ウィンドウを閉じる (Cmd+W)
keybind = cmd+w=text:\x13\x78
# 次のウィンドウ (Ctrl+Tab)
keybind = ctrl+tab=text:\x13\x6e
# 前のウィンドウ (Ctrl+Shift+Tab)
keybind = ctrl+shift+tab=text:\x13\x70
# ウィンドウ番号で切替 (Cmd+1-9)
keybind = cmd+1=text:\x13\x31
keybind = cmd+2=text:\x13\x32
keybind = cmd+3=text:\x13\x33
keybind = cmd+4=text:\x13\x34
keybind = cmd+5=text:\x13\x35
keybind = cmd+6=text:\x13\x36
keybind = cmd+7=text:\x13\x37
keybind = cmd+8=text:\x13\x38
keybind = cmd+9=text:\x13\x39
# --- 使わないGhosttyデフォルトを無効化 ---
keybind = cmd+n=unbind
keybind = cmd+d=unbind
tmux側の設定
~/.tmux.conf に追加:
# prefix を Ctrl+S に変更
set -g prefix C-s
unbind C-b
bind C-s send-prefix
# 新ウィンドウ (prefix + Ctrl+C)
bind C-c new-window
# ウィンドウを閉じる (prefix + x)
bind x confirm-before -p "kill window? (y/n)" kill-window
# 次/前のウィンドウ (prefix + n/p) ※デフォルトで設定済み
# ウィンドウ番号を1始まりに
set -g base-index 1
setw -g pane-base-index 1
設定の対応表をまとめるとこうなる。
| Ghostty keybind | エスケープシーケンス | tmux操作 | Chrome/IDE相当 |
|---|---|---|---|
cmd+t |
\x13\x03 |
新ウィンドウ | Cmd+T |
cmd+w |
\x13\x78 |
ウィンドウ閉じる | Cmd+W |
ctrl+tab |
\x13\x6e |
次のウィンドウ | Ctrl+Tab |
ctrl+shift+tab |
\x13\x70 |
前のウィンドウ | Ctrl+Shift+Tab |
cmd+1-9 |
\x13\x31-39 |
ウィンドウ番号切替 | Cmd+1-9 |
僕の追加設定
上のテンプレートに加えて、よく使うツールをCmdキーに割り当てている。
# fzf検索 (Cmd+F)
keybind = cmd+f=text:\x13\x66
# lazygit (Cmd+G)
keybind = cmd+g=text:\x13\x67
# yazi (Cmd+E)
keybind = cmd+e=text:\x13\x65
tmux側:
# fzf検索をpopupで起動
bind f display-popup -E -w 80% -h 80% "fzf"
# lazygitをpopupで起動
bind g display-popup -E -w 90% -h 90% -d "#{pane_current_path}" "lazygit"
# yaziをpopupで起動
bind e display-popup -E -w 90% -h 90% -d "#{pane_current_path}" "yazi"
自分の場合、fzfはezaのアイコン表示 + batのプレビュー + git statusの優先表示を組み合わせて、ファイル一覧をリッチにしている。enterで相対パス、Ctrl+Aで絶対パスを現在のペインに送る設定にしておくと、パスの手入力がほぼなくなる。

tmux popupで起動するので、Claude Code CLIの実行中でもCmd+Fで呼び出せる。ファイルパスを聞かれたときにサッと検索して送れるのが地味に助かる。
tmux-which-key で覚えなくていい
tmuxにはデフォルトで大量のキーバインドがある。設定をカスタマイズしていると「あれ、デフォルトのバインドなんだっけ」となりがち。tmux-which-key を入れると、prefix + Space でキーバインドの一覧がポップアップ表示される。
# TPM (tmux Plugin Manager) でインストール
set -g @plugin 'alexwforsythe/tmux-which-key'
prefix + Space を押すと、カテゴリ分けされたキーバインド一覧が出る。tmuxのデフォルトバインドを全部覚えている人はそういないと思うので、困ったらとりあえずこれを開けばなんとかなる。
注意点
Ghosttyデフォルトとの競合
Ghosttyには cmd+n(新ウィンドウ)、cmd+d(分割)などのデフォルトキーバインドがある。text: で上書きしたキーはそのままtmuxに送られるけど、上書きしていないデフォルトキーバインドはGhosttyの動作が残る。
テンプレートでは cmd+n と cmd+d を unbind で無効化しているけど、Ghosttyのウィンドウ分割機能を普段から使っている人は外すといい。
tmux非使用時のトレードオフ
この設定はtmuxセッション内でのみ意味がある。tmuxを起動していない状態でCmd+Tを押しても、エスケープシーケンスがそのまま端末に送られるだけ。
対策は2つ:
- tmuxを常時起動する。シェル起動時に自動アタッチする設定を入れておけばいい
- Ghostty設定を使い分ける。tmux用と非tmux用のconfigを別ファイルにして切り替える
iTerm2でも同じことはできる、ただし面倒
同じ「CmdキーでtmuxをChromeのように操作する」をiTerm2でもやっていた時期がある。できることは同じだけど、設定の手間が段違い。
iTerm2の場合、Preferences → Profiles → Keys を開いて、「+」ボタンで1つずつGUIで追加していく。アクションに「Send Hex Code」を選んで、Hexコードを手入力する。
例えば Cmd+T で新ウィンドウを開くなら:
- Keyboard Shortcut に
Cmd+Tを入力 - Action で「Send Hex Code」を選択
-
0x02 0x6EのようなHexコードを入力
これを全ショートカット分、1個ずつ繰り返す。Cmd+1〜9のウィンドウ切替だけで9回。テンプレート全体だと15回以上のGUI操作が必要になる。
Ghosttyなら設定ファイルに1行書くだけ。コピペで共有できて、Gitで管理できて、差分も見える。
# Ghostty: 1行で完結
keybind = cmd+t=text:\x13\x03
# iTerm2: GUIで3ステップ
# 1. Preferences > Profiles > Keys > +
# 2. Keyboard Shortcut: Cmd+T
# 3. Action: Send Hex Code → 0x13 0x03
iTerm2でも.itermkeymapファイルとしてエクスポート/インポートはできるし、Dynamic Profilesを使えばJSON管理も可能。ただ、プライマリのワークフローがGUIである以上、「設定ファイルをテキストエディタで編集して終わり」のGhosttyとは快適さが違う。
まとめ
Ghosttyの keybind + text: エスケープシーケンスで、tmuxのprefix 2ストロークをCmd 1ストロークに圧縮できる。
ChromeやVS Codeと同じショートカットでターミナルを操作できるのは、思った以上に快適だった。テンプレートをベースに、自分のワークフローに合わせて好きにいじるといい。
Discussion
Ghosttyのkeybindでtmuxをブラウザ感覚にする発想はいいですね。
Cmd+Fでfzf呼び出すの真似したい。
公式の方法よりも便利なのでやってみてくださいー