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-limitque 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-keysopção que você preferir, vi ou emacs. man tmuxpossui uma tabela útil que descreve as respectivas chaves.
Tenho o seguinte no meu .tmux.confpara 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 pastevim, 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 3000por 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 filenameque desejar.
(Por padrão, prefixé ctrl + b.)
save-buffer filename.txtparece 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-panecomando aceita -Se -Eespecifica 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 -1para ver sua versão. tmux -Vfunciona 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 tmuxpágina de manual e procure por capture-panemais 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'