最近、Claude Code を日常的に利用するようになりました。
私は普段 Vim を使用しており、画面を「左半分:ブラウザ」「右半分:ターミナル」に分割しています。
さらにターミナル側は、上 2/3 を Vim、残りの 1/3 を左右に分割してビルドやテストの実行に使用しています。
このレイアウトだと、Claude Code を常時表示させておくスペースがありません。そこで、tmux display-popup を活用して、必要なときだけ呼び出す運用にすることにしました。
要件
快適に使うために、以下の挙動を目指しました。
- ディレクトリごとの管理: 複数のプロジェクト(ディレクトリ)を別々のウィンドウで開いているため、Claude Code のセッションもウィンドウ(ディレクトリ)ごとに独立させたい。
- 高速な切り替え: キー操作一発で表示・非表示を行いたい。
やったこと
config.fish の設定
私はシェルに fish を使用しているため、config.fish に以下の関数を設定しました。
この関数のポイントは以下の通りです。
- カレントディレクトリ名をプレフィックスにしたセッション名(例:
popup_projectA)を作成 - すでに該当のセッションが存在する場合は、それを呼び出す(アタッチする)
- すでに popup 内にいる状態で実行された場合は、popup を閉じる(デタッチする)
function tmuxpopup -d "toggle tmux popup window"
set width '80%'
set height '80%'
# 現在のセッション名とカレントディレクトリを取得
set session (tmux display-message -p -F "#{session_name}")
set current_dir (basename (tmux display-message -p -F "#{pane_current_path}"))
set popup_session "popup_$current_dir"
# すでに popup セッション内にいる場合はデタッチ(閉じる)
if string match -q "popup_*" $session
tmux detach-client
else
# popup を表示。セッションがなければ新規作成、あればアタッチ
tmux display-popup -d '#{pane_current_path}' -xC -yC -w$width -h$height -E "tmux attach -t $popup_session || tmux new -s $popup_session"
end
end
.tmux.conf
tmux のキーバインド設定で、上記で作成した fish 関数を呼び出すようにします。 ここでは Ctrl + q に割り当てています。
# display-popup の設定
bind -n C-q run-shell "fish -c \"tmuxpopup\""
これにより、どのペインにいても Ctrl + q を押すだけで、そのディレクトリ専用の Claude Code 画面がポップアップし、もう一度押すと裏に隠れるようになります。
デモ
実際の挙動は以下の通りです。
おまけ
今回はターミナル全体(tmux)の機能を使いたかったため display-popup を採用しましたが、Vim ユーザーであればプラグインの akinsho/toggleterm.nvim を使用する方法もあります。
tmux のセッションマネージャーを利用していなかったり、Zellij などの他のターミナルマルチプレクサを使用している場合は、Vim プラグイン側で解決するのも良い選択肢だと思います。
参考
