Como gravar todo o scrollback de uma sessão tmux em um arquivo?
capture-panel
pode pegar a tela atual, mas não o scrollback inteiro.
Como gravar todo o scrollback de uma sessão tmux em um arquivo?
capture-panel
pode pegar a tela atual, mas não o scrollback inteiro.
Respostas:
Isso depende do valor history-limit
que você definiu no seu .tmux.conf
- o padrão é 2000; se você deseja capturar mais, precisará definir explicitamente o número de linhas.
Para capturar o scrollback inteiro, entre no modo de cópia, selecione o scrollback inteiro e puxe-o no buffer e cole-o no seu arquivo.
Como você conseguirá isso dependerá da mode-keys
opção que você preferir, vi ou emacs. man tmux
possui uma tabela útil que descreve as respectivas chaves.
Tenho o seguinte no meu .tmux.conf
para simplificar isso:
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
O processo para capturar o scrollback completo é então:
PrefixEsc : para entrar no modo de cópia
v : para iniciar a seleção visual (supondo que você já esteja na parte inferior da tela)
gg : para capturar tudo na rolagem
y : para puxá-lo para o buffer
Prefixc : abrir outra janela do tmux
vim scrollback.txt
i : entre no modo de inserção no vim
Prefixp : colar no arquivo
Também há uma resposta aqui descrevendo como copiar o buffer para um arquivo temporário usandoxsel
isso pode ser útil.
:set paste
vim, o vim ignorará a adição de indentações automáticas ou qualquer combinação de teclas baseada em inserção.
.tmux.conf
...
Para quem procura uma resposta simples, basta usar prefix+ :e digite capture-pane -S -3000
+ return(Substitua 3000
por quantas linhas você desejar salvar.) Isso copia essas linhas em um buffer.
Em seguida, para salvar o buffer em um arquivo, basta usar prefix+ :novamente e digite save-buffer filename.txt
+ return, substituindo o filename
que desejar.
(Por padrão, prefixé ctrl + b.)
save-buffer filename.txt
parece salvar o arquivo /
, não no pwd
(diretório atual). Em vez disso, eu forneci um caminho de arquivo absoluto e funcionou como um encanto
Com o tmux 1.5, o capture-pane
comando aceita -S
e -E
especifica as linhas inicial e final da captura; valores negativos podem ser usados para especificar linhas do histórico. Depois de ter os dados em um buffer, você pode salvá-los com save-buffer
.
Aqui está um exemplo de ligação (adequado para .tmux.conf
) que encerra tudo com um prompt para o nome do arquivo:
bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'
Isso captura (até) 32768 linhas do histórico mais as linhas exibidas no momento. A partir do tmux 1.6, você pode usar números até INT_MIN se o seu painel tiver um histórico mais profundo que as linhas de 32Ki (geralmente até 2Gi). A partir do tmux 2.0, você pode usar capture-pane -S -
para significar "iniciar no início do histórico" (ou seja, nenhum número negativo grande e codificado).
Nota: O número de linhas no arquivo salvo nem sempre será igual ao limite do histórico do painel mais sua altura.
Quando o buffer de histórico de um painel está cheio, o tmux descarta os 10% mais antigos das linhas em vez de descartar apenas uma linha. Isso significa que a profundidade efetiva do histórico de um painel às vezes será tão baixa quanto 90% do seu limite configurado.
tmux server-info | head -1
para ver sua versão. tmux -V
funciona no tmux * 1.4 e posterior.
[PrefixKey] :
para chegar à linha de comando do tmux e colar a linha inteira, basta fazer [Prefix] P
o P maiúsculo e pronto .
Eu tinha ligações de teclas padrão que pareciam ser um pouco diferentes da resposta de @ jasonwryan e não mudaram nada na configuração.
Abaixo está a receita que funcionou para mim. Talvez você ache isso útil se não quiser fazer alterações na configuração do tmux e apenas desejar copiar rapidamente algumas das rolagens.
Prefix== Ctrl+bno meu tmux (tmux 1.6, debian 7).
Se você quiser algo que possa ser executado a partir da linha de comando (em vez de usar suas chaves de prefixo tmux), tente executar:
tmux capture-pane -pS -1000000
Se você executá-lo e parece que não faz nada, é porque está exibindo exatamente o que estava na tela e fica com a mesma aparência.
Obviamente, você também pode canalizá-lo para um arquivo:
tmux capture-pane -pS -1000000 > file.out
Consulte a tmux
página de manual e procure por capture-pane
mais coisas que você pode fazer (como capturar seqüências de escape no caso de preservar a cor ou especificar se deseja unir várias linhas visuais quando elas não contiverem uma nova linha)
Aqui está um plugin tmux que permite isso:
https://github.com/tmux-plugins/tmux-logging
Após a instalação, salve o scrollback inteiro com prefix + alt-shift-p
.
Como gravar todo o scrollback de uma sessão tmux em um arquivo?
Eu uso isso no meu ~ / .tmux.conf e agora, quando saio do shell em execução, a saída do painel é salva em um arquivo de log exclusivo:
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'