📝
tmux capture-pane
普段使ってるツールの使ってない機能を使ってみる Advent Calendar 2025です。
(fishで確認)
tmux capture-paneとは
名前の通りPane(tmuxでの画面分割)をcaptureする機能です。
captureした結果はtmuxのバッファに保存されるので、貼り付けなどに使える他、標準出力にも出力できるので各種コマンドに渡して処理させるにも便利です。
使ってみる
tmuxを開いて、Window0で適当な作業をします。
> cd project/tmux
> echo aa > hoge
> echo bbb >> hoge
> wc -l hoge
2 hoge
新しく別のWindowを開いてcapture-paneを実行します。
(同じWindowでも実行できるのですが、元々の出力とcapture-paneの結果をわかりやすくするため)
tオプションにWindow/Paneを指定して実行します。
> tmux capture-pane -t 0:0
バッファに入ってるか確認します。
> tmux show-buffer
notrogue@DESKTOP-6QTOO0L ~ [1]> cd project/tmux
notrogue@DESKTOP-6QTOO0L ~/p/tmux> ls
notrogue@DESKTOP-6QTOO0L ~/p/tmux> echo aa > hoge
notrogue@DESKTOP-6QTOO0L ~/p/tmux> echo bbb >> hoge
notrogue@DESKTOP-6QTOO0L ~/p/tmux> wc -l hoge
2 hoge
notrogue@DESKTOP-6QTOO0L ~/p/tmux>
# (空行がたくさんあるので省略)
入ってますね。当然Prefix Key + ]で貼り付けも出来ます。
標準出力
pオプションを付けると標準主力に出せるので、パイプやリダイレクトにも出すのにも使えます。
# パイプで他コマンドに渡すことが出来ます
> tmux capture-pane -t :0 -p | grep wc
notrogue@DESKTOP-6QTOO0L ~/p/tmux> wc -l hoge
例えば、作業内容を要約してWindow名を設定することに使えます。
> tmux capture-pane -t :0 -p | claude -p "tmuxのWindow名に設定したいです。端的に作業内容を一行にまとめて。その名前だけ出力して余分なものは出力しないで" > window_name
> tmux rename-window -t :0 (cat window_name)
capture範囲の調整
テスト用にキャプチャ対象のWindowで適当なデータを流しておきます。
> seq 1 100
別のWindowで範囲指定を触ってみます。
デフォルトでは画面表示されてる行だけがコピーされます。
# (ちなみにターミナルを短くするとこの範囲も減ります)
> tmux capture-pane -t :0 -p | wc -l
50
> tmux capture-pane -t :0 -p | head
52
53
54
55
56
57
58
59
60
61
-S -で画面外も含めて取得できます。
# (最初と最後のプロンプトもあるので+2で102)
> tmux capture-pane -t :0 -p -S -| wc -l
102
Sオプションに数字を指定して、画面上最初の行にその値を足した行以降をキャプチャできます。
> tmux capture-pane -t :0 -p -S 48
100
# 負の数を指定すると画面最初の行からそこからさかのぼってキャプチャできます
> tmux capture-pane -t :0 -p -S -1 | head
51
52
53
54
55
56
57
58
59
60
Eオプションに数字を指定して、画面上部の行にその値を足した行以降をキャプチャ(画面最後の行からではない)できます。
> tmux capture-pane -t :0 -p -E 47 | tail
90
91
92
93
94
95
96
97
98
99
最後のプロンプトから
コマンドの結果をどこかに渡したい時とかは行数ではなく、「最後コマンドから!」で渡せた方が楽と思います。
直接的には(たぶん)できないので、プロンプトの文字列で検索することになると思います。
Discussion