Jak mogę zapisać wszystkie przewijanie w sesji tmux do pliku?
capture-panel
może pobrać bieżący ekran, ale nie cały przewijany ekran.
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ń na3000
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ącfilename
to, co chcesz.(Domyślnie prefixjest ctrl + b.)
źródło
save-buffer filename.txt
wydaje się zapisywać plik w/
, a nie wpwd
(bieżący katalog). Zamiast tegoW 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: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.
źródło
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).
źródło
Jeśli chcesz coś, co możesz uruchomić z wiersza poleceń (zamiast używać kluczy prefiksu tmux), spróbuj uruchomić:
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:
Zobacz
tmux
stronę podręcznika i szukajcapture-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)źródło
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
.źródło
To jest naprawdę bardzo łatwe. Wejdź do trybu poleceń, naciskając
prefix key
następnie:
. Następnie wykonajcapture-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.
źródło
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:
źródło