Kopiowanie bufora przewijania ekranu GNU do pliku (rozszerzona kopia drukowana)

188

Jak łatwo skopiować bufor przewijania ekranu GNU do pliku? Tzn. Mocniejsza wersja polecenia „wydruk”?

Na ekranie GNU mogę użyć „ Ctrl+ A Esc”, aby przejść do bufora przewijania. Mógłbym wtedy zaznaczyć cały bufor i użyć „ Ctrl+ A Ctrl+ ]”, aby wkleić go do bufora Emacsa , a tym samym zapisać go do pliku.

Jest to jednak żmudne. Czy istnieje polecenie Screen, które po prostu skopiuje bufor przewijania do pliku, podobnie jak „wydruk” dla widocznej części ekranu?

Peter Mortensen
źródło

Odpowiedzi:

284

Aby zapisać całą zawartość bufora przewijania do pliku, wpisz

Ctrl+ Ai : przejść do trybu poleceń

hardcopy -h <filename>

W starszych wersjach screen, jeśli tylko to zrobisz hardcopy -h, po prostu zapisuje do pliku -h. Zostało to naprawione w wersji 4.2.0, więc hardcopy -hzapisuje hardcopy.Ngdzie Njest bieżący numer okna.

Rachunek
źródło
1
Zauważ, że plik zostaje zapisany w katalogu domowym - przynajmniej dla mnie. Dzięki za odpowiedź, btw!
Ritesh
2
@allrite: Zostaje zapisany w $ PWD (jeśli nie podasz pełnej ścieżki), nie ma żadnego specjalnego zachowania.
Pushpendre
9
Tak, ale zostaje zapisany na ekranie $ PWD, w którym uruchomiłeś ekran. Brak w $ PWD sesji ekranowej.
seumasmac,
7
Zauważ, że jeśli masz długi bufor przewijania i nie ma w nim zbyt wiele, zapisany plik może wydawać się pusty, ponieważ pierwsze dziesiątki lub setki wierszy są puste, a zawartość jest na końcu.
Terry Brown
3
Jedna dodatkowa uwaga na temat miejsca, w którym zapisywana jest kopia: Jeśli wykonasz cd do katalogu, a następnie użyjesz, screen -raby ponownie połączyć się z istniejącą sesją, kopia nie zostanie zapisana w aktywnym katalogu wewnątrz ekranu lub w tej, w której byłeś przed użyciem screen -r. Myślę, że zostanie zapisany w katalogu, w którym byłeś, kiedy pierwszy raz zacząłeś sesję ekranową. Możesz to zmienić za pomocą polecenia hardcopydir .
Matthias Fripp
25

Naciśnij Ctrl+ A : bufferfile /tmp/somefile.txt ENTER , a następnie Ctrl+A >

Spowoduje to zapisanie bieżącej zawartości bufora do nazwanego pliku.

Roshan
źródło
Próbowałem tego, a „ctrl-a>” mówi „Nic się nie stało”. Pierwszy krok brzmiał: „Plik bufora to teraz '/tmp/foo.txt'”, ale wydaje się, że nawet nie tworzy tego pliku.
1
Czy na pewno skopiowałeś coś do bufora ekranu za pomocą Ctrl + A [? Wygląda na to, że bufor może być pusty - nie skopiuje całego bufora przewijania, tylko część wybraną za pomocą Ctrl + A [
Roshan
2
Ach, szukałem skrótu, aby skopiować cały bufor bez użycia ctrl-a [
12

TL; DR: ^A:writebuf <filename>

Wydaje się, że OP chce sposobu na użycie wybranej części bufora, który otrzymujesz, wykonując ^ A [, zaznaczając tekst za pomocą spacji jako początku i końca, a następnie zamiast wkleić ^ A], zapisz wynikową wybraną część bufora do pliku.

To działało:

^A:writebuf <filename>

Uwaga: jeden „f” w writebuf

Kevin Mullet
źródło
1
Nie? Nie. OP chce zapisać CAŁY bufor, a nie tylko wybraną część. - OP
2
Szczury Ominęło go to tak bardzo
Kevin Mullet
4
Ten post jest nadal przydatny. Dobra robota.
Justin E
1
Odkryłem, że aby to działało na MacOSX, musiałem użyć ścieżki abolute (tj .: /Users/user1/path/to/file.txt)
jhrf
6

Spróbuj hardcopy -huwzględnić cały bufor.

Jorge Gutierrez
źródło
2
To po prostu drukuje w pliku ~ / -h
2
@barrycarter: To mogło się zmienić w nowszych wersjach. Począwszy od ekranu 4.03.01, hardcopy -hpisze hardcopy.N, gdzie Njest bieżący numer okna.
Keith Thompson
4

To działało dla mnie:

Wejdź do trybu edycji ( ~) i wpisz:

:hardcopy -h buff_file

Stworzył ogromny plik, z którego 98% było puste, ale moje logi były w pełni obecne w pozostałych 2%.

freeninza
źródło
-2

Ctrl+ A,: i wydaj polecenie „zaloguj się”.

Lub ustaw go jako domyślny w pliku .screenrc jako „defloguj”.

Brianray
źródło
2
Myślę, że to po prostu zaczyna rejestrować wszystko po uruchomieniu tego polecenia. Nie chcę rejestrować wszystkiego (zbyt szczegółowe). Chcę tylko przechwycić bufor przewijania jako plik.
-3

Do Ctrl+ A, H.

Które zapisuje bieżący ekran w pliku kopii dysku, np hardcopy.0 na ekranie 0. To wydaje się być szybszy sposób niż dzieje Ctrl+ A, :a wpisując drukowanej polecenie.

Jeff
źródło
3
Niestety, to po prostu zapisuje WIDOCZNĄ część ekranu, a nie bufor przewijania.