tmuxセッションのすべてのスクロールバックをファイルに書き込むにはどうすればよいですか?
capture-panel
現在の画面を取得できますが、スクロールバック全体を取得することはできません。
tmuxセッションのすべてのスクロールバックをファイルに書き込むにはどうすればよいですか?
capture-panel
現在の画面を取得できますが、スクロールバック全体を取得することはできません。
回答:
これは、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
にコピーする方法を説明する回答もあります。
:set paste
vimで使用する場合、vimは自動インデントまたは挿入ベースのキーバインドの追加を無視します。
.tmux.conf
...
単純な答えをお探しの方のために、ちょうど使用しprefix+ :、次に入力し、capture-pane -S -3000
+ return(置き換え3000
あなたが保存したいしかし、多くの線で。)バッファにこのコピーしたもののライン。
すると、ちょうど使用し、バッファをファイルに保存するにはprefix+ :再び、と入力しsave-buffer filename.txt
+ return交換、filename
あなたが欲しいものは何でもして。
(デフォルトでprefixはctrl + bです。)
save-buffer filename.txt
ファイル/
をpwd
(現在のディレクトリ)ではなくに保存するようです。代わりに、私は絶対ファイルパスを提供し、それが魅力のように働いた
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%に達することもあります。
tmux server-info | head -1
あなたのバージョンを見るのに使うことができます。tmux -V
tmux * 1.4以降で動作します。
[PrefixKey] :
tmuxコマンドライン[Prefix] P
にアクセスして行全体を貼り付けてから、大文字のPを実行するだけでよいのです。
@jasonwryanの答えとは少し違うように見える標準のキーバインディングがあり、configには何も変更しませんでした。
以下は私のために働いたレシピです。tmux configを変更せずに、スクロールバックの一部をすばやくコピーしたい場合に便利でしょう。
Prefix== Ctrl+b私のtmux(tmux 1.6、debian 7)。
(tmuxプレフィックスキーを使用する代わりに)コマンドラインから実行できるものが必要な場合は、次を実行してください。
tmux capture-pane -pS -1000000
実行しても何もしないように見える場合は、画面に表示されている内容をそのまま出力しているため、同じように見えます。
もちろん、ファイルにパイプすることもできます:
tmux capture-pane -pS -1000000 > file.out
tmux
マニュアルページを参照して、capture-pane
できることを探してください(色を保持したい場合はエスケープシーケンスをキャプチャしたり、新しい行が含まれていないときに複数の視覚的な行を結合するかどうかを指定したりします)
これを可能にするtmuxプラグインを次に示します。
https://github.com/tmux-plugins/tmux-logging
インストールしたら、でスクロールバック全体を保存しprefix + alt-shift-p
ます。
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'