Comment puis-je écrire tout le scrollback d'une session tmux dans un fichier?
capture-panel
peut saisir l'écran actuel, mais pas le défilement complet.
Comment puis-je écrire tout le scrollback d'une session tmux dans un fichier?
capture-panel
peut saisir l'écran actuel, mais pas le défilement complet.
Réponses:
Cela dépend de la valeur history-limit
que vous avez définie dans votre .tmux.conf
- la valeur par défaut est 2000; si vous souhaitez en capturer davantage, vous devez définir explicitement le nombre de lignes.
Pour capturer l'intégralité du défilement, passez en mode copie, sélectionnez l'intégralité du défilement, puis glissez-le dans le tampon, puis collez-le dans votre fichier.
La manière dont vous accomplirez cela dépendra de l’ mode-keys
option que vous préférez, vi ou emacs. man tmux
a un tableau utile décrivant les clés respectives.
J'ai le suivant dans mon .tmux.conf
pour simplifier ceci:
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
Le processus pour capturer le défilement complet est alors:
PrefixEsc : pour entrer en mode copie
v : pour commencer la sélection visuelle (en supposant que vous êtes déjà au bas de l'écran)
gg : tout capturer dans le scrollback
y : pour le tirer dans le tampon
Prefixc : ouvre une autre fenêtre tmux
vim scrollback.txt
i : entrer en mode insertion dans vim
Prefixp : coller dans le fichier
Il y a également une réponse ici décrivant comment copier le tampon dans un fichier temporaire en utilisantxsel
cela pourrait être utile.
:set paste
in vim, vim ignorera l'ajout d'indentations automatiques ou de toute association de touches basée sur des insertions.
.tmux.conf
...
Pour ceux qui recherchent une réponse simple, utilisez simplement prefix+ :, puis tapez capture-pane -S -3000
+ return(remplacez-le 3000
par le nombre de lignes que vous souhaitez enregistrer.) Ceci copie ces lignes dans un tampon.
Ensuite, pour enregistrer le tampon dans un fichier, utilisez simplement prefix+ :encore, et tapez save-buffer filename.txt
+ return, en remplaçant filename
par ce que vous voulez.
(Par défaut, prefixc'est ctrl + b.)
save-buffer filename.txt
semble enregistrer le fichier dans /
, pas dans pwd
(répertoire actuel). Au lieu de cela, j'ai fourni un chemin de fichier absolu et cela a fonctionné à merveille
Avec tmux 1.5, la capture-pane
commande accepte -S
et permet -E
de spécifier les lignes de début et de fin de la capture; Des valeurs négatives peuvent être utilisées pour spécifier des lignes de l'historique. Une fois que vous avez les données dans un tampon, vous pouvez les sauvegarder avec save-buffer
.
Voici un exemple de liaison (adapté à .tmux.conf
) qui résume le tout avec une invite pour le nom du fichier:
bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'
Cela capture (jusqu'à) 32 768 lignes d’historique plus les lignes actuellement affichées. À partir de tmux 1.6, vous pouvez utiliser des nombres allant jusqu'à INT_MIN si votre volet a un historique plus profond que les lignes 32 Ko (généralement jusqu'à 2 lignes Gi). À partir de tmux 2.0, vous pouvez utiliser capture-pane -S -
le sens de «commencer au début de l’historique» (c’est-à-dire, aucun grand nombre négatif codé en dur).
Remarque: le nombre de lignes dans le fichier enregistré ne sera pas toujours égal à la limite d'historique du volet plus sa hauteur.
Lorsque la mémoire tampon de l'historique d'un volet est saturée, tmux ignore les 10% de lignes les plus anciens au lieu de supprimer une seule ligne. Cela signifie que la profondeur de l'historique effectif d'un volet sera parfois aussi basse que 90% de sa limite configurée.
tmux server-info | head -1
pour voir votre version. tmux -V
fonctionne dans tmux * 1.4 et versions ultérieures.
[PrefixKey] :
pour aller à la ligne de commande tmux, puis collez la ligne entière, puis faites simplement un [Prefix] P
P majuscule et vous êtes prêt à partir.
J'avais des raccourcis clavier qui semblaient être un peu différents de ceux de @ jasonwryan et qui ne changeaient rien dans la configuration.
Voici la recette qui a fonctionné pour moi. Cela vous sera peut-être utile si vous ne souhaitez apporter aucune modification à la configuration de tmux et que vous souhaitez simplement copier une partie du défilement.
Prefix== Ctrl+bdans mon tmux (tmux 1.6, debian 7).
Si vous voulez quelque chose que vous pouvez exécuter depuis la ligne de commande (au lieu d’utiliser vos clés de préfixe tmux), essayez d’exécuter:
tmux capture-pane -pS -1000000
Si vous l'exécutez et qu'il semble ne rien faire, c'est parce qu'il affiche exactement ce qui vient d'être affiché sur votre écran, il a donc le même aspect.
Bien sûr, vous pouvez également le transférer dans un fichier:
tmux capture-pane -pS -1000000 > file.out
Reportez-vous à la tmux
page de manuel et recherchez d' capture-pane
autres actions à effectuer (par exemple, capturer des séquences d'échappement si vous souhaitez conserver la couleur, ou spécifier si vous souhaitez que plusieurs lignes visuelles soient jointes lorsqu'elles ne contiennent pas de nouvelle ligne).
Voici un plugin tmux qui permet ceci:
https://github.com/tmux-plugins/tmux-logging
Après l’avoir installé, enregistrez le défilement complet avec prefix + alt-shift-p
.
C'est vraiment très facile. Entrez le mode de commande en appuyant sur prefix key
puis sur :
. Alors fais capture-pane -S -<line number you want to dump>
ensuitesave-buffer <filepath>
Ce fichier contient toutes les sorties de défilement. Vous devez ensuite supprimer le tampon pour des raisons de sécurité.
Comment puis-je écrire tout le scrollback d'une session tmux dans un fichier?
J'utilise ceci dans mon ~ / .tmux.conf , et maintenant, lorsque je quitte mon shell en cours d'exécution, la sortie du volet est enregistrée dans un fichier journal unique:
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'