すべてのtmuxスクロールバックをファイルに書き込みます


194

tmuxセッションのすべてのスクロールバックをファイルに書き込むにはどうすればよいですか?

capture-panel 現在の画面を取得できますが、スクロールバック全体を取得することはできません。

回答:


52

これは、history-limit設定した値によって異なります.tmux.conf-デフォルトは2000です。さらにキャプチャする場合は、行数を明示的に設定する必要があります。

スクロールバック全体をキャプチャするには、コピーモードに入り、スクロールバック全体を選択し、バッファにヤンクしてから、ファイルに貼り付けます。

これをどのように達成するかはmode-keys、viまたはemacsのいずれかのオプションによって異なります。man tmuxそれぞれのキーを説明する便利な表があります。

私は.tmux.confこれを簡単にするために次のものを持っています:

unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

フルスクロールバックをキャプチャするプロセスは次のとおりです。

PrefixEsc :コピーモードに入る

v :視覚的な選択を開始するには(既に画面の下部にいると仮定)

gg :スクロールバックですべてをキャプチャする

y :バッファにヤンクする

Prefixc :別のtmuxウィンドウを開きます

vim scrollback.txt

i :vimで挿入モードに入る

Prefixp :ファイルに貼り付け

また、役に立つかもしれないバッファを一時ファイルxselコピーする方法を説明する回答もあります


2
これはせいぜい問題です。Vimの挿入モードへの貼り付けには、自動インデントを有効にしている場合など、あらゆる種類の問題があります。私はこれを満足に機能させることができませんでした。
コンラッドルドルフ

13
:set pastevimで使用する場合、vimは自動インデントまたは挿入ベースのキーバインドの追加を無視します。
トランター

@tlunter素敵なヒント!
-jasonwryan

これはデフォルトのキーバインディングで実行できますか?
-daveloyall

もちろん@daveloyallは、ちょうど私が私から含まキーバインドオプションは使用しないでください.tmux.conf...
jasonwryan

224

単純な答えをお探しの方のために、ちょうど使用しprefix+ :、次に入力し、capture-pane -S -3000+ return(置き換え3000あなたが保存したいしかし、多くの線で。)バッファにこのコピーしたもののライン。

すると、ちょうど使用し、バッファをファイルに保存するにはprefix+ :再び、と入力しsave-buffer filename.txt+ return交換、filenameあなたが欲しいものは何でもして。

(デフォルトでprefixctrl + bです。)


14
save-buffer filename.txtファイル/pwd(現在のディレクトリ)ではなくに保存するようです。代わりに、私は絶対ファイルパスを提供し、それが魅力のように働いた
MohamedEzz

15
そして、<< amount-of-buffer-lines-you-to-you-to-save >>の前のマイナス
Yordan Georgiev

9
これが最良の答えです。どうもありがとうございます。
ジェシーアトキンソン

7
はい、あなたは勝ちます。これが一番の答えです。
言葉forthewise

1
+ n> 1 upvoteにログインした後、少なくともこの回答が私にとって有用であったのは2回目だと思われます。XD
L0j1k

159

tmuxは 1.5、capture-paneコマンドが受け付け-S-Eキャプチャの開始と終了行を指定します。負の値を使用して、履歴の行を指定できます。データをバッファに保存したら、で保存できますsave-buffer

次に.tmux.conf、ファイル名のプロンプトですべてをラップするバインディングの例(に適しています)を示します。

bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'

これにより、(最大)32768行の履歴と現在表示されている行がキャプチャされます。tmux 1.6 以降では、ペインに32Ki行(通常は2Gi行まで)よりも深い履歴がある場合、INT_MINまでの数字を使用できます。以降tmuxの 2.0は、使用することができますcapture-pane -S -意味(すなわちなし大、ハードコードされた負の数)「の歴史の初めに開始」します。


注:保存されたファイルの行数は、ペインの履歴制限にその高さを加えたものと常に等しいとは限りません。

ペインの履歴バッファーがいっぱいになると、tmuxは1行だけを破棄するのではなく、最も古い10%の行を破棄します。つまり、ペインの有効な履歴の深さは、構成された制限の90%に達することもあります。


1
おそらくtmux 1.3 を実行しています。おそらくtmux server-info | head -1あなたのバージョンを見るのに使うことができます。tmux -Vtmux * 1.4以降で動作します。
クリスジョンセン

1
これは、私が見つけた最も有用なtmuxコマンドの1つです。
ケニー

1
すでにtmuxウィンドウにいて、再起動したくない場合は、単に[PrefixKey] : tmuxコマンドライン[Prefix] P にアクセスして行全体を貼り付けてから、大文字のPを実行するだけでよいのです。
アリ

1
@BradenBest SIプレフィックスをユニットに添付する必要があります。「32Ki」も「32K」も有効ではありません。大文字のKはSIプレフィックスではないことに注意してください。混乱を招く種まきの側にいて、それを間違えるのは素晴らしい仕事です。
アレクサンドルドゥビンスキー

1
@BradenBest 1 MB は以前は正確な意味持っていたため、バイナリプレフィックスは混乱を招きますが、現在は2つの意味があります。さらに悪いことに、誤ったマーケティングに使用するストレージメーカーを除き、10進数の意味はIT業界にとっては役に立ちません。この混乱は、実用的であることを拒否した退屈な人々によって始まりました。あなた自身がそんなに物足りないなら、私は私の口調のために謝罪し、バイナリ接頭辞に対するあなたの熱意を再考することをお勧めします。
アレクサンドルドゥビンスキー

19

@jasonwryanの答えとは少し違うように見える標準のキーバインディングがあり、configには何も変更しませんでした。

以下は私のために働いたレシピです。tmux configを変更せずに、スクロールバックの一部をすばやくコピーしたい場合に便利でしょう。

Prefix== Ctrl+b私のtmux(tmux 1.6、debian 7)。

  1. 選択モードに入ります:Prefix+ [
  2. 選択を開始:Space
  3. vimナビゲーションを使用して必要なテキストを強調表示します(たとえば、矢印キーを使用するか、押すggと出力履歴の先頭に到達します)。
  4. 実際にを使用して内部クリップボードにコピーしEnterます。コピーモードを終了します。
  5. (おそらく新しいtmuxタブで)vimを使用してファイルを開き、Prefix+ を使用する前にコピーしたコンテンツを貼り付けます]
  6. 次に、そのファイルのcatを実行するか、必要に応じて出力を使用します。

man tmuxは、tmuxがemacsモードになっていることを整理するのに役立ちました。そのため、上記のキー割り当てはどれも機能しませんでした。もう一度、tmuxを使用して、使用するものを整理しました。しかし、私が作った最大の過ちは...私はから内容を保存し、ホストがIからtmuxのを実行していたホストではなかったので、私は間違っているホスト上に保存したファイルを探して保管ということでした
Cognitiaclaeves

16

(tmuxプレフィックスキーを使用する代わりに)コマンドラインから実行できるものが必要な場合は、次を実行してください。

tmux capture-pane -pS -1000000

実行しても何もしないように見える場合は、画面に表示されている内容をそのまま出力しているため、同じように見えます。

もちろん、ファイルにパイプすることもできます:

tmux capture-pane -pS -1000000 > file.out

tmuxマニュアルページを参照して、capture-paneできることを探してください(色を保持したい場合はエスケープシーケンスをキャプチャしたり、新しい行が含まれていないときに複数の視覚的な行を結合するかどうかを指定したりします)


1
特に受け入れられた回答が機能しなくなったため、これは非常に役立ちます。
ピオジョ

13

これを可能にするtmuxプラグインを次に示します。

https://github.com/tmux-plugins/tmux-logging

インストールしたら、でスクロールバック全体を保存しprefix + alt-shift-pます。


4

これは実際には非常に簡単です。プレスによりコマンドモードを入力しprefix keyた後:。それcapture-pane -S -<line number you want to dump> からsave-buffer <filepath>

そのファイルには、すべてのスクロールバック出力が含まれています。その後、安全上の理由からバッファを削除する必要があります。


1

tmuxセッションのすべてのスクロールバックをファイルに書き込むにはどうすればよいですか?

〜/ .tmux.confでこれを使用し、実行中のシェルを終了すると、ペインの出力が一意のログファイルに保存されます。

set -g remain-on-exit
set-hook pane-died 'capture-pane -S - -E - ; save-buffer "$HOME/logs/tmux/tmux-saved.#{host_short}-#{session_id}:#{window_id}:#{pane_id}-#{pane_pid}-#{client_activity}.log"; delete-buffer; kill-pane'                        
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.