¿Cómo puedo escribir todo el scrollback en una sesión tmux en un archivo?
capture-panel
puede tomar la pantalla actual, pero no el desplazamiento completo.
¿Cómo puedo escribir todo el scrollback en una sesión tmux en un archivo?
capture-panel
puede tomar la pantalla actual, pero no el desplazamiento completo.
Respuestas:
Esto depende del valor history-limit
que haya establecido en su .tmux.conf
- el valor predeterminado es 2000; Si desea capturar más, deberá establecer explícitamente el número de líneas.
Para capturar todo el desplazamiento hacia atrás, ingrese al modo de copia, seleccione todo el desplazamiento hacia atrás y tírelo al búfer, luego péguelo en su archivo.
La forma en que logre esto dependerá de la mode-keys
opción que prefiera, vi o emacs. man tmux
tiene una tabla útil que describe las claves respectivas.
Tengo lo siguiente en mi .tmux.conf
para simplificar esto:
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
El proceso para capturar el desplazamiento completo es entonces:
PrefixEsc : para ingresar al modo de copia
v : para comenzar la selección visual (suponiendo que ya se encuentre en la parte inferior de la pantalla)
gg : para capturar todo en el desplazamiento hacia atrás
y : para tirarlo al búfer
Prefixc : abra otra ventana de tmux
vim scrollback.txt
i : ingrese el modo de inserción en vim
Prefixp : pegar en el archivo
También hay una respuesta aquí que describe cómo copiar el búfer a un archivo temporal usandoxsel
eso podría ser útil.
:set paste
vim, vim ignorará la adición de sangrías automáticas o cualquier combinación de teclas basada en inserción.
.tmux.conf
...
Para aquellos que buscan una respuesta simple, simplemente use prefix+ :, luego escriba capture-pane -S -3000
+ return(Reemplace 3000
con la cantidad de líneas que desee guardar). Esto copia esas líneas en un búfer.
Luego, para guardar el búfer en un archivo, simplemente use prefix+ :nuevamente y escriba save-buffer filename.txt
+ return, reemplazando filename
con lo que desee.
(Por defecto prefixes ctrl + b.)
save-buffer filename.txt
parece guardar el archivo en /
, no en pwd
(directorio actual). En cambio, proporcioné una ruta de archivo absoluta y funcionó de
Con tmux 1.5, el capture-pane
comando acepta -S
y -E
especifica las líneas de inicio y finalización de la captura; los valores negativos se pueden usar para especificar líneas del historial. Una vez que tenga los datos en un búfer, puede guardarlos con save-buffer
.
Aquí hay un enlace de ejemplo (adecuado para .tmux.conf
) que lo envuelve todo con un mensaje para el nombre de archivo:
bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'
Esto captura (hasta) 32768 líneas de historial más las líneas que se muestran actualmente. Comenzando con tmux 1.6, puede usar números hasta INT_MIN si su panel tiene un historial que es más profundo que las líneas de 32Ki (generalmente hasta líneas de 2Gi). A partir de tmux 2.0, puede capture-pane -S -
significar "comenzar al principio del historial" (es decir, no hay un número negativo grande y codificado).
Nota: El número de líneas en el archivo guardado no siempre será igual al límite del historial del panel más su altura.
Cuando el búfer de historial de un panel está lleno, tmux descarta el 10% más antiguo de las líneas en lugar de descartar solo una línea. Esto significa que la profundidad del historial efectivo de un panel a veces será tan baja como el 90% de su límite configurado.
tmux server-info | head -1
para ver tu versión. tmux -V
funciona en tmux * 1.4 y versiones posteriores.
[PrefixKey] :
para llegar a la línea de comando de tmux, y luego pegue toda la línea, entonces solo haga una [Prefix] P
P mayúscula y estará listo.
Tenía combinaciones de teclas estándar que parecían ser un poco diferentes a las de la respuesta de @ jasonwryan y no cambiaron nada en la configuración.
A continuación se muestra la receta que funcionó para mí. Tal vez lo encuentre útil si no desea realizar ningún cambio en la configuración de tmux y solo desea copiar rápidamente parte del desplazamiento hacia atrás.
Prefix== Ctrl+ben mi tmux (tmux 1.6, debian 7).
Si desea algo que pueda ejecutar desde la línea de comandos (en lugar de usar sus teclas de prefijo tmux), intente ejecutar:
tmux capture-pane -pS -1000000
Si lo ejecuta y parece que no hace nada, es porque está produciendo exactamente lo que estaba en su pantalla, por lo que se ve igual.
Por supuesto, también puede canalizarlo a un archivo:
tmux capture-pane -pS -1000000 > file.out
Consulte la tmux
página de manual y busque capture-pane
más cosas que puede hacer (como capturar secuencias de escape en caso de que desee conservar el color o especificar si desea unir varias líneas visuales cuando no contienen una nueva línea)
Aquí hay un complemento tmux que permite esto:
https://github.com/tmux-plugins/tmux-logging
Después de instalarlo, guarde todo el desplazamiento hacia atrás con prefix + alt-shift-p
.
Esto es realmente muy fácil. Ingrese al modo de comando presionando y prefix key
luego :
. Entonces haz capture-pane -S -<line number you want to dump>
entoncessave-buffer <filepath>
Ese archivo contiene toda la salida de desplazamiento hacia atrás. Debe eliminar el búfer después por razones de seguridad.
¿Cómo puedo escribir todo el scrollback en una sesión tmux en un archivo?
Lo uso en mi ~ / .tmux.conf , y ahora cuando salgo de mi shell en ejecución, la salida del panel se guarda en un archivo de registro único:
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'