web-dev-qa-db-fra.com

Écrire tous les défilements tmux dans un fichier

Comment puis-je écrire tout le défilement dans une session tmux dans un fichier?

capture-panel peut récupérer l'écran actuel, mais pas le défilement entier.

224
David Wolever

Cela dépend de la valeur de history-limit que vous avez défini dans votre .tmux.conf - la valeur par défaut est 2000; si vous souhaitez capturer plus, vous devrez définir explicitement le nombre de lignes.

Pour capturer l'intégralité du scrollback, passez en mode copie, sélectionnez l'intégralité du scrollback et tirez-le dans le tampon, puis collez-le dans votre fichier.

La façon dont vous accomplirez cela dépendra du 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 ce qui suit 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 de capture du défilement complet est alors le suivant:

PrefixEsc : pour passer en mode copie

v : pour commencer la sélection visuelle (en supposant que vous êtes déjà en bas de l'écran)

gg : pour tout capturer dans le scrollback

y : pour le tirer dans le tampon

Prefixc : ouvrir une autre fenêtre tmux

vim scrollback.txt

i : passer en mode insertion dans vim

Prefixp : coller dans un fichier

Il y a aussi une réponse ici décrivant comment copier le tampon dans un fichier temporaire en utilisant xsel qui pourrait être utile.

58
jasonwryan

Pour ceux qui recherchent une réponse simple, utilisez simplement prefix + :, puis saisissez capture-pane -S -3000return (Remplacez 3000 avec le nombre de lignes que vous souhaitez enregistrer.) Cela copie ces lignes dans un tampon.

Ensuite, pour enregistrer le tampon dans un fichier, utilisez simplement prefix + : à nouveau et tapez save-buffer filename.txtreturn, en remplaçant filename par ce que vous voulez.

(Par défaut prefix est ctrl + b.)

273
Sauce McBoss

Avec tmux 1,5, le capture-pane la commande accepte -S et -E pour 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 enregistrer avec save-buffer.

Voici un exemple de liaison (adapté pour .tmux.conf) qui termine le tout avec une invite pour le nom de 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'à) 32768 lignes d'historique plus les lignes actuellement affichées. En commençant par tmux 1.6, vous pouvez utiliser des nombres jusqu'à INT_MIN si votre volet a un historique plus profond que les lignes 32Ki (généralement jusqu'à 2Gi). À partir de tmux 2.0, vous pouvez utiliser capture-pane -S - pour signifier "commencer au début de l'histoire" (c'est-à-dire pas de 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 le tampon d'historique d'un volet est plein, tmux supprime les 10% des lignes les plus anciennes au lieu de ne supprimer qu'une seule ligne. Cela signifie que la profondeur d'historique effective d'un volet sera parfois aussi faible que 90% de sa limite configurée.

165
Chris Johnsen

Si vous voulez quelque chose que vous pouvez exécuter à partir de 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 ne semble rien faire, c'est parce qu'il affiche exactement ce qui était juste sur votre écran, donc il a la même apparence.

Bien sûr, vous pouvez également le diriger vers un fichier:

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

Consultez la page de manuel tmux et recherchez capture-pane pour plus de choses que vous pouvez faire (comme capturer des séquences d'échappement au cas où 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)

31

J'avais des raccourcis clavier standard qui semblaient être un peu différents de ceux de réponse de @ jasonwryan et je n'ai rien changé dans la configuration.

Voici la recette qui a fonctionné pour moi. Peut-être que vous le trouverez utile si vous ne souhaitez pas apporter de modifications dans la configuration de tmux et que vous souhaitez simplement copier rapidement une partie du défilement.

Prefix == Ctrl+b dans mon tmux (tmux 1.6, debian 7).

  1. Entrer en mode de sélection: Prefix + [.
  2. Commencer la sélection: Space.
  3. Mettez en surbrillance le texte nécessaire à l'aide de la navigation vim (par exemple, utilisez les touches fléchées ou appuyez sur gg pour atteindre le début de l'historique de sortie).
  4. Copiez réellement dans le presse-papiers interne en utilisant Enter. Vous quitterez le mode copie.
  5. Ouvrez n'importe quel fichier à l'aide de vim (probablement sur le nouvel onglet tmux) et collez le contenu que vous avez copié avant d'utiliser Prefix + ].
  6. Ensuite, vous pouvez utiliser ce fichier ou utiliser la sortie dont vous avez besoin.
22
Alex

Voici un plugin tmux qui permet cela:

https://github.com/tmux-plugins/tmux-logging

Après l'avoir installé, enregistrez le défilement entier avec prefix + alt-shift-p.

15
user80379

C'est en fait très simple. Entrez dans le mode de commande en appuyant sur prefix key puis :. Alors fais capture-pane -S -<line number you want to dump> Alors save-buffer <filepath>

Ce fichier contient toutes les sorties de défilement. Vous devez ensuite supprimer le tampon pour des raisons de sécurité.

6
Wang

Comment puis-je écrire tout le défilement dans une session tmux dans un fichier?

J'utilise ceci dans mon ~/.tmux.conf, et maintenant quand 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'                        
3
user2688272