Bagaimana saya bisa menulis semua scrollback di sesi tmux ke file?
capture-panel
dapat mengambil layar saat ini, tetapi tidak seluruh scrollback.
Bagaimana saya bisa menulis semua scrollback di sesi tmux ke file?
capture-panel
dapat mengambil layar saat ini, tetapi tidak seluruh scrollback.
Jawaban:
Ini tergantung pada nilai history-limit
yang telah Anda atur di Anda .tmux.conf
- standarnya adalah 2000; jika Anda ingin menangkap lebih banyak, Anda harus menetapkan jumlah garis secara eksplisit.
Untuk menangkap seluruh scrollback, masuk ke mode salin, pilih seluruh scrollback, dan tarik ke dalam buffer, lalu rekatkan ke file Anda.
Bagaimana Anda mencapainya akan tergantung pada mode-keys
opsi yang Anda inginkan, vi atau emacs. man tmux
memiliki tabel yang membantu menjelaskan kunci masing-masing.
Saya memiliki yang berikut ini .tmux.conf
untuk menyederhanakan ini:
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
Maka proses untuk menangkap scrollback penuh adalah:
PrefixEsc : untuk masuk ke mode salin
v : untuk memulai pemilihan visual (dengan asumsi Anda sudah berada di bagian bawah layar)
gg : untuk menangkap semua yang ada di scrollback
y : untuk menariknya ke dalam buffer
Prefixc : buka jendela tmux lain
vim scrollback.txt
i : masuk ke mode insert di vim
Prefixp : rekatkan ke file
Ada juga jawaban di sini yang menjelaskan cara menyalin buffer ke file sementara menggunakanxsel
yang mungkin berguna.
:set paste
dalam vim, vim akan mengabaikan menambahkan lekukan otomatis atau ikatan kunci berbasis insert.
.tmux.conf
...
Bagi mereka yang mencari jawaban sederhana, cukup gunakan prefix+ :, lalu ketikkan capture-pane -S -3000
+ return(Ganti 3000
dengan banyak baris yang ingin Anda simpan.) Ini menyalin garis-garis itu ke dalam buffer.
Kemudian, untuk menyimpan buffer ke file, cukup gunakan prefix+ :lagi, dan ketik save-buffer filename.txt
+ return, ganti filename
dengan apa pun yang Anda inginkan.
(Secara default prefixadalah ctrl + b.)
save-buffer filename.txt
tampaknya menyimpan file dalam /
, bukan di pwd
(direktori saat ini). Sebagai gantinya, saya memberikan path file absolut dan itu bekerja seperti pesona
Dengan tmux 1.5, capture-pane
perintah menerima -S
dan -E
menentukan garis awal dan akhir dari tangkapan; nilai negatif dapat digunakan untuk menentukan baris dari histori. Setelah Anda memiliki data dalam buffer, Anda dapat menyimpannya dengan save-buffer
.
Berikut adalah contoh pengikatan (cocok untuk .tmux.conf
) yang membungkus semuanya dengan prompt untuk nama file:
bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'
Ini menangkap (hingga) 32768 baris riwayat plus garis yang saat ini ditampilkan. Dimulai dengan tmux 1.6, Anda bisa menggunakan angka ke INT_MIN jika panel Anda memiliki riwayat yang lebih dalam dari 32Ki baris (biasanya hingga 2Gi baris). Mulai di tmux 2.0, Anda bisa menggunakan yang capture-pane -S -
berarti "mulai pada awal sejarah" (yaitu tidak ada angka negatif yang besar dan sulit dikodekan).
Catatan: Jumlah baris dalam file yang disimpan tidak akan selalu sama dengan batas riwayat panel plus tingginya.
Saat buffer riwayat panel penuh, tmux membuang 10% baris tertua alih-alih membuang hanya satu baris. Ini berarti kedalaman sejarah panel efektif kadang-kadang akan serendah 90% dari batas yang dikonfigurasi.
tmux server-info | head -1
untuk melihat versi Anda. tmux -V
bekerja di tmux * 1.4 dan yang lebih baru.
[PrefixKey] :
untuk sampai ke baris perintah tmux, dan kemudian tempelkan seluruh baris, maka Anda hanya melakukan [Prefix] P
itu adalah modal P dan Anda baik untuk pergi.
Saya punya binding kunci standar yang tampaknya sedikit berbeda dari jawaban @ jasonwryan dan tidak mengubah apa pun dalam konfigurasi.
Di bawah ini adalah resep yang bekerja untuk saya. Mungkin Anda akan merasakan manfaatnya jika Anda tidak ingin membuat perubahan dalam konfigurasi tmux dan hanya ingin dengan cepat menyalin beberapa scrollback.
Prefix== Ctrl+bdi tmux saya (tmux 1.6, debian 7).
Jika Anda menginginkan sesuatu yang dapat Anda jalankan dari baris perintah (alih-alih menggunakan kunci awalan tmux Anda), coba jalankan:
tmux capture-pane -pS -1000000
Jika Anda menjalankannya dan sepertinya tidak melakukan apa-apa, itu karena mengeluarkan apa yang ada di layar Anda, sehingga terlihat sama.
Tentu saja, Anda juga dapat menyalurkannya ke file:
tmux capture-pane -pS -1000000 > file.out
Lihat tmux
halaman manual dan cari capture-pane
lebih banyak hal yang dapat Anda lakukan (seperti menangkap urutan pelarian jika Anda ingin mempertahankan warna, atau tentukan apakah Anda ingin beberapa garis visual digabungkan ketika tidak berisi garis baru)
Berikut adalah plugin tmux yang memungkinkan ini:
https://github.com/tmux-plugins/tmux-logging
Setelah Anda menginstalnya, simpan seluruh scrollback dengan prefix + alt-shift-p
.
Bagaimana saya bisa menulis semua scrollback di sesi tmux ke file?
Saya menggunakan ini di ~ / .tmux.conf saya , dan sekarang ketika saya keluar dari shell saya yang sedang berjalan, output pane disimpan ke file log unik:
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'