Grava todo o scrollback do tmux em um arquivo

154

Como posso escrever todo o pergaminho em uma sessão do tmux em um arquivo?

capture-panel pode pegar a tela atual, mas não a rolagem inteira.

    
por David Wolever 10.12.2011 / 21:29

7 respostas

47

Isso depende do valor de history-limit que você definiu em .tmux.conf - o padrão é 2000; Se você deseja capturar mais, você precisará definir explicitamente o número de linhas.

Para capturar todo o pergaminho, entre no modo de cópia, selecione o pergaminho inteiro, e coloque-o no buffer, depois cole-o no seu arquivo.

Como você realiza isso dependerá da opção mode-keys que você preferir, vi ou emacs. man tmux tem uma tabela útil descrevendo as respectivas chaves.

Eu 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 a rolagem completa é:

Prefixo Esc : para entrar no modo de cópia

v : para iniciar a seleção visual (supondo que você já esteja na parte inferior da tela)

g g : para capturar tudo na rolagem

y : para puxar para o buffer

Prefixo c : abre outra janela do tmux

vim scrollback.txt

i : entra no modo de inserção no vim

Prefixo p : colar no arquivo

Há também uma resposta aqui descrevendo como copiar o buffer para um arquivo temporário usando xsel pode ser útil.

    
por 10.12.2011 / 22:44
145

Com tmux 1.5, o comando capture-pane aceita -S e -E para especificar 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á-lo com save-buffer .

Aqui está um exemplo de ligação (adequado para .tmux.conf ) que resume 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 de histórico mais as linhas exibidas no momento. Começando com tmux 1.6, você pode usar números até INT_MIN se o seu painel tiver um histórico que seja mais profundo que linhas de 32Ki (geralmente até linhas de 2Gi). Começando em 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).

Observação: o número de linhas no arquivo salvo nem sempre será igual ao limite de histórico do painel, além de sua altura.

Quando o buffer de histórico de um painel está cheio, tmux descarta os 10% mais antigos das linhas em vez de descartar apenas uma linha. Isso significa que a profundidade do histórico efetivo de um painel às vezes será tão baixa quanto 90% do limite configurado.

    
por 11.12.2011 / 07:32
144

Para aqueles que procuram uma resposta simples, apenas use o prefixo + : , e digite capture-pane -S -3000 + return (Substitua 3000 com quantas linhas você quiser salvar. Isso copia essas linhas em um buffer.

Então, para salvar o buffer em um arquivo, apenas use o prefixo + : novamente, e digite save-buffer filename.txt + return , substituindo filename pelo que você quiser.

(Por omissão, o prefixo é ctrl + b .)

    
por 17.10.2015 / 16:59
18

Eu tinha ligações de teclas padrão que pareciam ser um pouco diferentes do que na resposta @ jasonwryan e não alterei nada na configuração.

Abaixo está a receita que funcionou para mim. Talvez você ache útil se você não quiser fazer nenhuma alteração na configuração do tmux e apenas quiser copiar rapidamente o pergaminho.

Prefixo == Ctrl + b no meu tmux (tmux 1.6, debian 7).

  1. Entre no modo de seleção: Prefixo + [.
  2. Iniciar seleção: Espaço .
  3. Destaque o texto necessário usando a navegação vim (por exemplo, use as teclas de seta ou pressione g g para chegar ao início do histórico de saída).
  4. Na verdade, copie na área de transferência interna usando Enter . Você será retirado do modo de cópia.
  5. Abra qualquer arquivo usando vim (provavelmente na nova guia tmux) e cole o conteúdo copiado antes de usar o Prefixo + ] .
  6. Então você pode fazer o gato desse arquivo ou usar a saída como você precisa.
por 14.02.2014 / 11:58
10

Aqui está um plugin do tmux que permite isso:

link

Depois de instalá-lo, salve o pergaminho inteiro com prefix + alt-shift-p .

    
por 30.08.2014 / 14:56
4

Se você quiser algo que possa ser executado a partir da linha de comando (em vez de usar as chaves de prefixo do tmux), tente executar:

tmux capture-pane -pS -1000000

Se você executá-lo e parece não fazer nada, é porque ele está exibindo exatamente o que estava na tela, então parece o mesmo.

Claro, você também pode canalizá-lo em um arquivo:

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

Veja a página tmux man e procure por capture-pane para mais coisas que você pode fazer (como capturar seqüências de escape no caso de você querer preservar cores, ou especifique se você quer unir várias linhas visuais quando eles don ' t contém uma nova linha)

    
por 08.05.2018 / 01:21
2

Isso é realmente muito fácil. Entre no modo de comando pressionando prefix key then : . Então faça capture-pane -S -<line number you want to dump> Então save-buffer <filepath>

Esse arquivo contém toda a saída de rolagem. Você deve excluir o buffer depois por motivos de segurança.

    
por 24.01.2018 / 16:10

Tags