web-dev-qa-db-ja.com

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

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

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

224
David Wolever

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

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

これをどのように達成するかは、viまたはemacsであるmode-keysオプションによって異なります。 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 を使用してバッファを一時ファイルにコピーする方法を説明する回答もあります。

58
jasonwryan

簡単な答えをお探しの方は、 prefix + :、次にcapture-pane -S -3000return (置換3000(保存する行数はいくつでも)。これにより、それらの行がバッファにコピーされます。

次に、バッファをファイルに保存するには、次を使用します prefix + : もう一度、save-buffer filename.txtreturnfilenameを好きなものに置き換えます。

(デフォルトでは prefix です ctrl + b。)

273
Sauce McBoss

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%になることがあります。

165
Chris Johnsen

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

tmux capture-pane -pS -1000000

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

もちろん、それをファイルにパイプすることもできます。

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

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

31

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

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

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

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

これを可能にするtmuxプラグインは次のとおりです。

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

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

15
user80379

これは実際には非常に簡単です。 prefix keyを押してから:を押して、コマンドモードに入ります。次にcapture-pane -S -<line number you want to dump>を実行してからsave-buffer <filepath>を実行します

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

6
Wang

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'                        
3
user2688272