Tüm tmux scrollback'i bir dosyaya yaz


194

Bir tmux oturumundaki tüm geri izleme dosyalarını bir dosyaya nasıl yazabilirim?

capture-panel Geçerli ekranı kaplayabilir, ancak geri kaydırma işleminin tamamını değil.

Yanıtlar:


52

Bu history-limit, sizin için belirlediğiniz değere bağlıdır .tmux.conf- varsayılan değer 2000'dir; Daha fazla fotoğraf çekmek istiyorsanız, satır sayısını açıkça ayarlamanız gerekir.

Geri kaydırma işleminin tamamını yakalamak için, kopya moduna girin, geri kaydırma işleminin tamamını seçin ve arabelleğe kopyalayın, ardından dosyanızı yapıştırın.

Bunu nasıl başaracağınız mode-keys, tercih ettiğiniz seçeneğe, vi veya emacs'e bağlı olacaktır . man tmuxilgili tuşları tanımlayan faydalı bir tabloya sahiptir.

Bunu .tmux.confbasitleştirmek için içimde aşağıdakiler var :

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

Tam kaydırma işlemini yakalamak için işlem şöyledir:

PrefixEsc : kopyalama moduna girmek için

v : görsel seçime başlamak için (ekranın altında olduğunuzu varsayarak)

gg : geri kaydırmadaki her şeyi yakalamak için

y : Tamponun içine yerleştirmek için

Prefixc : başka bir tmux penceresi aç

vim scrollback.txt

i : vim'deki ekleme moduna gir

Prefixp : dosyaya yapıştır

Tamponun,xsel bunun yararlı olabileceği geçici bir dosyaya nasıl kopyalanacağını açıklayan bir cevap da var .


2
Bu en iyi ihtimalle problemli… Vim'deki insert moduna yapıştırma işleminde her türlü problem var, örneğin otomatik girintiyi etkinleştirdiğinizde. Bunu hiç bir zaman tatmin edemediğim için yapmadım.
Konrad Rudolph

13
:set pasteVim'de kullanırsanız , vim otomatik girintiler veya herhangi bir insert tabanlı keybinder eklemeyi göz ardı eder.
tlunter

@tlunter güzel ipucu!
jasonwryan

Bu, varsayılan anahtar bağlantıları ile yapılabilir mi?
daveloyall

@daveloyall Tabii ki, sadece benim dahil ettik keybind seçeneklerini kullanmayın .tmux.conf...
jasonwryan

224

Basit bir cevap arayanlar için, sadece prefix+ tuşlarını kullanın :, sonra capture-pane -S -3000+ yazın return( 3000kaydetmek istediğiniz çok satırla değiştirin .) Bu satırları ara belleğe kopyalar.

Sonra, sadece kullanmak, bir dosyaya tampon kaydetmek için prefix+ :tekrar ve yazın save-buffer filename.txt+ returnyerine filenamedilediğiniz ile.

(Varsayılan prefixolarak ctrl + b.)


14
save-buffer filename.txtDosyayı /değil pwd(mevcut dizin) içine kaydediyor gibi görünüyor . Bunun yerine, mutlak bir dosya yolu
sağladım

15
ve <<sayı- of-buffer-lines-you-want-to-save>> 'ın önündeki MINUS' ı unutmayın
Yordan Georgiev

9
Buradaki en iyi cevap bu. Çok teşekkür ederim.
Jesse Atkinson

7
Evet, sen kazandın. Bu en iyi cevap olmalı.
wordsforthewise

1
+ n> 1 Oy vermek için giriş yaptıktan sonra, bu cevabın bana en azından ikinci kez geldiği anlaşılıyor. XD
L0j1k

159

İle tmux 1.5, capture-panekomut kabul -Sve -Eyakalama başlangıç ve bitiş çizgileri belirtmek için; negatif değerler geçmişe ait satırları belirtmek için kullanılabilir. Verileri bir arabellekte aldıktan sonra, onu kaydedebilirsiniz save-buffer.

İşte her .tmux.confşeyi dosya adı için bir bilgi istemi ile tamamlayan (uygun ) bir bağlayıcı :

bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'

Bu (en fazla) 32768 tarih satırını ve şu anda görüntülenen satırları yakalar. İle başlayarak tmux senin bölmesi 32Ki hatları (genellikle 2Gi hatlarına kadar) daha derin bir geçmişi vardır eğer 1.6, sen INT_MIN aşağı numaralarını kullanabilirsiniz. Tmux 2.0'dan başlayarak, capture-pane -S -“tarihin başlangıcından başla” (yani büyük, kodlanmış negatif sayılar yok) anlamına gelir.


Not: Kaydedilen dosyadaki satır sayısı her zaman bölmenin geçmiş sınırına ve yüksekliğine eşit olmaz.

Bir bölmenin geçmiş arabelleği dolduğunda, tmux , yalnızca bir satırı atmak yerine satırların en eski% 10'unu atar. Bu, bölmenin etkin tarih derinliğinin bazen yapılandırılan limitinin% 90'ı kadar düşük olacağı anlamına gelir.


1
Muhtemelen tmux 1.3 kullanıyorsunuz; Muhtemelen tmux server-info | head -1versiyonunuzu görmek için kullanabilirsiniz . tmux -Vtmux * 1.4 ve sonrasında çalışır.
Chris Johnsen

1
Bu, bulduğum en faydalı tmux komutlarından biri.
kenny

1
Zaten tmux pencerenizdeyseniz ve yeniden başlatmak istemezseniz [PrefixKey] : , tmux komut satırına ulaşmak için bir işlem yapın ve ardından tüm satırı yapıştırın, o zaman sadece [Prefix] P büyük P olur ve gitmeniz iyi olur.
Ali

1
@BradenBest Bir SI önekinin bir birime eklenmesi gerekir. Ne "32Ki" ne de "32K" geçerli değil. Boşuna bu büyük K bir SI öneki değildir. Kafa karışıklığı ekim işlerinin yanında olmak ve yanlış anlamak güzel bir iş.
Aleksandr Dubinsky

1
İkili önekleri @BradenBest 1 MB çünkü karışıklığı saçmak için kullanılan tam bir anlama sahip, ancak şimdi iki anlamı vardır. Daha da kötüsü, ondalık anlam, yanlış pazarlama için kullanan depolama üreticileri hariç, BT endüstrisi için işe yaramaz. Bu karışıklığa, pratik olmayı reddeden eşler tarafından başladı. Kendin gibi bir soydaş değilsen, tonum için özür dilerim ve ikili öneklere duyduğun tutkuyu tekrar gözden geçirmeni rica ediyorum.
Aleksandr Dubinsky,

19

@ Jasonwryan'ın cevabından biraz farklı gibi görünen ve config dosyasındaki hiçbir şeyi değiştirmeyen standart anahtar bağlantılarım vardı .

Aşağıda benim için çalıştı tarifi. Belki tmux config'de herhangi bir değişiklik yapmak istemiyorsanız ve sadece geri kaydırma işleminin bir kısmını hızlıca kopyalamak istiyorsanız, onu faydalı bulacaksınız.

Prefix== Ctrl+btmux'umda (tmux 1.6, debian 7).

  1. Seçim moduna giriniz: Prefix+ [.
  2. Seçme başlangıcı: Space.
  3. Vim navigasyonunu kullanarak gerekli metni vurgulayın (örneğin, ggçıkış geçmişinin başlangıcına ulaşmak için ok tuşlarını kullanın veya tuşuna basın ).
  4. Aslında kullanarak iç panoya kopyalayın Enter. Kopyalama modundan çıkacaksınız.
  5. Herhangi bir dosyayı vim kullanarak açın (muhtemelen yeni tmux sekmesinde) ve Prefix+ kullanmadan önce kopyaladığınız içeriği yapıştırın ].
  6. Sonra bu dosyanın kedisini yapabilir veya ihtiyacınız olan çıktıyı kullanabilirsiniz.

man tmux, tmux'umun emacs modunda olduğunu çözmeme yardım etti, bu yüzden yukarıdaki anahtar bağlantıların hiçbiri işe yaramadı. Adam tmux, yine ne kullanmam gerektiğini çözmeme yardım etti. Ama yaptığım en büyük hata, içeriği sakladığım ana makinenin tmux kullandığım ana bilgisayar olmamasıydı, bu yüzden yanlış ana bilgisayardaki kayıtlı dosyayı aramaya devam ettim ...
Cognitiaclaeves

16

Komut satırından çalıştırabileceğiniz bir şey istiyorsanız (tmux önek tuşlarınızı kullanmak yerine), çalıştırmayı deneyin:

tmux capture-pane -pS -1000000

Eğer onu çalıştırırsanız ve hiçbir şey yapmıyor gibi göründüğü için, tam olarak ekranınızdakileri gösterdiği için aynı görünüyor.

Elbette bir dosyaya da aktarabilirsiniz:

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

tmuxKılavuz sayfasına bakın ve capture-paneyapabileceğiniz daha fazla şey için arama yapın (rengi korumak istemeniz durumunda kaçış dizilerini yakalama veya yeni bir çizgi içermediğinde birden fazla görsel çizginin birleştirilmesini isteyip istemediğinizi belirtme gibi)


1
Bu, özellikle kabul edilen cevapların artık işe yaramaması nedeniyle çok yararlıdır.
piojo


4

Bu aslında çok kolay. Komut moduna prefix keyardından tuşuna basın :. Sonra yap capture-pane -S -<line number you want to dump> O zamansave-buffer <filepath>

Bu dosya tüm scrollback çıktılarını içeriyor. Güvenlik nedeniyle tamponu daha sonra silmelisiniz.


1

Bir tmux oturumundaki tüm geri izleme dosyalarını bir dosyaya nasıl yazabilirim?

Bunu ~ / .tmux.conf dosyasında kullanıyorum ve şimdi çalışan kabuğumdan çıktığımda, bölme çıktısı benzersiz bir günlük dosyasına kaydedildi:

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'                        
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.