Jak mogę zapisać wszystkie przewijanie w sesji tmux do pliku?
capture-panel
może pobrać bieżący ekran, ale nie cały przewijany ekran.
Jak mogę zapisać wszystkie przewijanie w sesji tmux do pliku?
capture-panel
może pobrać bieżący ekran, ale nie cały przewijany ekran.
Odpowiedzi:
Zależy to od wartości history-limit
, którą ustawiłeś w .tmux.conf
- domyślną wartością jest 2000; jeśli chcesz uchwycić więcej, musisz jawnie ustawić liczbę linii.
Aby przechwycić całe przewijanie, przejdź do trybu kopiowania, zaznacz całe przewijanie i przeciągnij go do bufora, a następnie wklej do pliku.
To, jak to zrobisz, będzie zależeć od mode-keys
preferowanej opcji, vi lub emacsa. man tmux
ma pomocną tabelę opisującą odpowiednie klucze.
Mam następujące .tmux.conf
uproszczenia:
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
Proces przechwytywania pełnego przewijania jest wtedy następujący:
PrefixEsc : aby wejść w tryb kopiowania
v : aby rozpocząć selekcję wizualną (zakładając, że jesteś już na dole ekranu)
gg : aby uchwycić wszystko w przewijaniu
y : wciąga go do bufora
Prefixc : otwórz kolejne okno Tmux
vim scrollback.txt
i : wejdź w tryb wstawiania w vimie
Prefixp : wklej do pliku
Tutaj znajduje się również odpowiedź opisująca sposób kopiowania bufora do pliku tymczasowego,xsel
który może być przydatny.
:set paste
w vimie, vim zignoruje dodawanie automatycznych wcięć lub wszelkich skrótów klawiszowych opartych na wstawkach.
.tmux.conf
...
Dla tych, którzy szukają prostej odpowiedzi, po prostu użyj prefix+ :, a następnie wpisz capture-pane -S -3000
+ return(Zamień na 3000
dowolną liczbę wierszy, które chcesz zapisać). Spowoduje to skopiowanie tych linii do bufora.
Następnie, aby zapisać bufor w pliku, po prostu ponownie użyj prefix+ :i wpisz save-buffer filename.txt
+ return, zastępując filename
to, co chcesz.
(Domyślnie prefixjest ctrl + b.)
save-buffer filename.txt
wydaje się zapisywać plik w /
, a nie w pwd
(bieżący katalog). Zamiast tego
W tmux 1.5 capture-pane
polecenie akceptuje -S
i -E
określa linie początkową i końcową przechwytywania; wartości ujemnych można użyć do określenia wierszy z historii. Gdy masz już dane w buforze, możesz je zapisać za pomocą save-buffer
.
Oto przykładowe powiązanie (odpowiednie dla .tmux.conf
), które otacza wszystko pytaniem o nazwę pliku:
bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'
Przechwytuje (do) 32768 linii historii plus aktualnie wyświetlane linie. Począwszy od tmux 1.6, możesz używać liczb do INT_MIN, jeśli twój panel ma historię głębszą niż linie 32Ki (zwykle do linii 2Gi). Począwszy od tmux 2.0, możesz używać słowa capture-pane -S -
„zacząć od początku historii” (tj. Nie ma dużej, zakodowanej na stałe liczby ujemnej).
Uwaga: Liczba wierszy w zapisanym pliku nie zawsze będzie równa limitowi historii panelu plus jego wysokości.
Gdy bufor historii panelu jest pełny, tmux odrzuca najstarsze 10% linii zamiast odrzucać tylko jedną linię. Oznacza to, że efektywna głębokość historii panelu może czasami wynosić nawet 90% skonfigurowanego limitu.
tmux server-info | head -1
swojej wersji. tmux -V
działa w tmux * 1.4 i nowszych.
[PrefixKey] :
aby dostać się do linii poleceń tmux, a następnie wklej całą linię, a następnie po prostu zrób [Prefix] P
to, jest to duże P i możesz już iść.
Miałem standardowe powiązania klawiszy, które wyglądały nieco inaczej niż w odpowiedzi @ jasonwryan i nie zmieniłem niczego w konfiguracji.
Poniżej znajduje się przepis, który dla mnie zadziałał. Może przyda ci się, jeśli nie chcesz dokonywać żadnych zmian w konfiguracji tmux i po prostu chcesz szybko skopiować część przewijania.
Prefix== Ctrl+bw moim tmux (tmux 1.6, debian 7).
Jeśli chcesz coś, co możesz uruchomić z wiersza poleceń (zamiast używać kluczy prefiksu tmux), spróbuj uruchomić:
tmux capture-pane -pS -1000000
Jeśli go uruchomisz i wydaje się, że nic nie robi, to dlatego, że wyświetla dokładnie to, co było na ekranie, więc wygląda tak samo.
Oczywiście możesz również potokować go do pliku:
tmux capture-pane -pS -1000000 > file.out
Zobacz tmux
stronę podręcznika i szukaj capture-pane
więcej rzeczy, które możesz zrobić (na przykład przechwytuj sekwencje specjalne na wypadek, gdybyś chciał zachować kolor, lub określ, czy chcesz połączyć wiele linii wizualnych, gdy nie zawierają one nowej linii)
Oto wtyczka tmux, która to umożliwia:
https://github.com/tmux-plugins/tmux-logging
Po zainstalowaniu zapisz całe przewijanie za pomocą prefix + alt-shift-p
.
To jest naprawdę bardzo łatwe. Wejdź do trybu poleceń, naciskając prefix key
następnie :
. Następnie wykonaj capture-pane -S -<line number you want to dump>
następniesave-buffer <filepath>
Ten plik zawiera wszystkie dane wyjściowe przewijania. Następnie powinieneś usunąć bufor ze względów bezpieczeństwa.
Jak mogę zapisać wszystkie przewijanie w sesji tmux do pliku?
Używam tego w moim ~ / .tmux.conf , a teraz kiedy wychodzę z działającej powłoki, dane wyjściowe panelu są zapisywane w unikalnym pliku dziennika:
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'