Come posso scrivere tutto lo scrollback in una sessione di tmux su un file?
capture-panel
può catturare la schermata corrente, ma non l'intero scorrimento.
Come posso scrivere tutto lo scrollback in una sessione di tmux su un file?
capture-panel
può catturare la schermata corrente, ma non l'intero scorrimento.
Risposte:
Questo dipende dal valore history-limit
che hai impostato nel tuo .tmux.conf
- il valore predefinito è 2000; se desideri acquisire di più, dovrai impostare esplicitamente il numero di linee.
Per acquisire l'intero scorrimento, accedere alla modalità copia, selezionare l'intero scorrimento, quindi trascinarlo nel buffer, quindi incollarlo nel file.
Il modo in cui lo realizzerai dipenderà mode-keys
dall'opzione che preferisci, vi o emacs. man tmux
ha una tabella utile che descrive le rispettive chiavi.
Ho il seguente nel mio .tmux.conf
per semplificare questo:
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
Il processo per acquisire lo scrollback completo è quindi:
PrefixEsc : per accedere alla modalità copia
v : per iniziare la selezione visiva (supponendo che tu sia già nella parte inferiore dello schermo)
gg : per catturare tutto nello scrollback
y : per strattonarlo nel buffer
Prefixc : apre un'altra finestra di tmux
vim scrollback.txt
i : entra in modalità inserimento in vim
Prefixp : incolla nel file
C'è anche una risposta qui che descrive come copiare il buffer in un file temporaneo usandoxsel
quello che potrebbe essere utile.
:set paste
in vim, vim ignorerà l'aggiunta di rientri automatici o eventuali combinazioni di tasti basate sull'inserimento.
.tmux.conf
...
Per coloro che cercano una risposta semplice, basta usare prefix+ :, quindi digitare capture-pane -S -3000
+ return(Sostituisci 3000
con qualsiasi numero di righe desideri salvare). Questo copia quelle righe in un buffer.
Quindi, per salvare il buffer in un file, basta utilizzare nuovamente prefix+ :e digitare save-buffer filename.txt
+ return, sostituendolo filename
con quello che desideri.
(L'impostazione predefinita prefixè ctrl + b.)
save-buffer filename.txt
sembra salvare il file in /
, non in pwd
(directory corrente). Invece, ho fornito un percorso file assoluto e ha funzionato come un incantesimo
Con tmux 1.5, il capture-pane
comando accetta -S
e -E
specifica le linee di inizio e fine dell'acquisizione ; valori negativi possono essere utilizzati per specificare righe dalla cronologia. Una volta che hai i dati in un buffer, puoi salvarli con save-buffer
.
Ecco un esempio di associazione (adatto per .tmux.conf
) che lo avvolge con un prompt per il nome file:
bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'
Questo cattura (fino a) 32768 righe di cronologia più le righe attualmente visualizzate. A partire da tmux 1.6, è possibile utilizzare i numeri fino a INT_MIN se il riquadro ha una cronologia più profonda di 32 righe Ki (in genere fino a 2 righe Gi). A partire da tmux 2.0, è possibile utilizzare capture-pane -S -
per indicare "inizio all'inizio della cronologia" (ovvero nessun numero negativo grande e codificato).
Nota: il numero di righe nel file salvato non sarà sempre uguale al limite della cronologia del riquadro più la sua altezza.
Quando il buffer della cronologia di un riquadro è pieno, tmux scarta il 10% più vecchio delle righe invece di scartarne solo una. Ciò significa che la profondità della cronologia effettiva di un riquadro a volte sarà pari al 90% del limite configurato.
tmux server-info | head -1
per vedere la tua versione. tmux -V
funziona in tmux * 1.4 e versioni successive.
[PrefixKey] :
per arrivare alla riga di comando di tmux, quindi incolla l'intera linea, quindi fai semplicemente un [Prefix] P
P maiuscola e sei a posto.
Avevo le combinazioni di tasti standard che sembravano essere leggermente diverse rispetto alla risposta di @ jasonwryan e non ho cambiato nulla in configurazione.
Di seguito è la ricetta che ha funzionato per me. Forse lo troverai utile se non vuoi apportare modifiche in tmux config e vuoi solo copiare rapidamente parte dello scrollback.
Prefix== Ctrl+bnel mio tmux (tmux 1.6, debian 7).
Se vuoi qualcosa che puoi eseguire dalla riga di comando (invece di usare le chiavi del prefisso tmux), prova a eseguire:
tmux capture-pane -pS -1000000
Se lo esegui e sembra non fare nulla, è perché sta emettendo esattamente ciò che era solo sullo schermo, quindi sembra lo stesso.
Naturalmente, puoi anche reindirizzarlo in un file:
tmux capture-pane -pS -1000000 > file.out
Guarda la tmux
pagina man e cerca capture-pane
altre cose che puoi fare (come catturare sequenze di escape nel caso tu voglia conservare il colore, o specificare se vuoi unire più linee visive quando non contengono una nuova linea)
Ecco un plugin tmux che consente questo:
https://github.com/tmux-plugins/tmux-logging
Dopo averlo installato, salvare l'intero scrollback con prefix + alt-shift-p
.
Questo è in realtà molto semplice. Accedere alla modalità di comando premendo prefix key
quindi :
. Quindi fai capture-pane -S -<line number you want to dump>
allorasave-buffer <filepath>
Quel file contiene tutto l'output di scrollback. Successivamente è necessario eliminare il buffer per motivi di sicurezza.
Come posso scrivere tutto lo scrollback in una sessione di tmux su un file?
Lo uso nel mio ~ / .tmux.conf e ora quando esco dalla shell in esecuzione, l'output del riquadro viene salvato in un file di registro univoco:
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'