모든 tmux 스크롤 백을 파일에 기록


194

tmux 세션의 모든 스크롤 백을 파일에 어떻게 쓸 수 있습니까?

capture-panel 현재 화면을 가져올 수 있지만 전체 스크롤 백은 할 수 없습니다.

답변:


52

이것은 history-limit사용자가 설정 한 값에 따라 다릅니다 .tmux.conf. 기본값은 2000입니다. 더 많이 캡처하려면 라인 수를 명시 적으로 설정해야합니다.

전체 스크롤 백을 캡처하려면 복사 모드로 들어가서 전체 스크롤 백을 선택하여 버퍼에 넣고 파일에 붙여 넣습니다.

이 작업을 수행하는 방법은 mode-keys원하는 옵션, vi 또는 emacs 에 따라 다릅니다 . man tmux각 키를 설명하는 유용한 표가 있습니다.

이것을 .tmux.conf단순화하기 위해 다음과 같은 것들이 있습니다 .

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

전체 스크롤 백을 캡처하는 프로세스는 다음과 같습니다.

PrefixEsc : 복사 모드로 들어가기

v : 시각적 선택을 시작합니다 (이미 화면 하단에 있다고 가정)

gg : 스크롤 백의 모든 것을 캡처

y : 버퍼에 넣다

Prefixc : 다른 TMUX 창 열기

vim scrollback.txt

i : vim에서 삽입 모드로 들어갑니다

Prefixp : 파일에 붙여 넣기

유용한 버퍼를 사용하여 버퍼를 임시 파일xsel 로 복사 하는 방법을 설명하는 답변도 있습니다.


2
Vim에서 삽입 모드로 붙여 넣는 것은 자동 들여 쓰기가 활성화 된 경우와 같은 모든 종류의 문제가 있습니다. 나는 이것이 만족스럽게 작동하지 않았습니다.
— Konrad Rudolph

13
:set pastevim에서 사용하는 경우 vim은 자동 들여 쓰기 또는 삽입 기반 키 바인딩 추가를 무시합니다.
— tlunter

@tlunter 좋은 팁!
— jasonwryan

기본 키 바인딩으로이 작업을 수행 할 수 있습니까?
— daveloyall

물론 @daveloyall, 그냥 내에서 포함 된 keybind 옵션을 사용하지 않는 .tmux.conf...
— jasonwryan

224

간단한 답을 찾는 분들, 그냥 사용하십시오 prefix+를 :, 다음 입력 capture-pane -S -3000+ return(교체 3000저장하려는 그러나 많은 선.)이 복사 버퍼에 그 라인을.

그런 다음, 바로 사용, 파일에 버퍼를 저장 prefix+ :다시와 입력 save-buffer filename.txt+ return교체, filename당신이 원하는 무엇이든 함께.

(기본값 prefix은 ctrl + b입니다.)


14
save-buffer filename.txt파일 /을 pwd(현재 디렉토리)가 아닌에 저장하는 것 같습니다 . 대신, 나는 절대 파일 경로를 제공했고 그것은 매력처럼 작동했다
— MohamedEzz

15
그리고 << 버퍼 라인 수-당신이 저장하고 싶어요 >> 앞의 마이너스를 잊지 마세요
— Yordan Georgiev

9
이것이 가장 좋은 대답입니다. 정말 고맙습니다.
— Jesse Atkinson

7
그렇습니다. 이것이 최고의 답변이어야합니다.
— wordsforthewise

1
+ n> 1 upvote에 로그인 한 후이 답변이 나에게 도움이 된 것은 적어도 두 번째입니다. XD
— L0j1k

159

로 TMUX 1.5의 capture-pane명령을 받아들 -S과 -E캡처의 시작과 끝 라인을 지정; 마이너스 값을 사용하여 히스토리에서 라인을 지정할 수 있습니다. 버퍼에 데이터가 있으면로 저장할 수 있습니다 save-buffer.

다음은 .tmux.conf파일 이름을 묻는 프롬프트로 묶는 예제 바인딩 (에 적합 함 )입니다.

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

32768 라인의 히스토리와 현재 표시된 라인을 캡처합니다. tmux 1.6 부터 창에 32Ki 라인보다 깊은 히스토리 (일반적으로 최대 2Gi 라인)가있는 경우 INT_MIN까지 숫자를 사용할 수 있습니다. tmux 2.0 부터는 capture-pane -S -"히스토리 시작시 시작"(즉, 하드 코드 된 음수가 크지 않음)을 의미 하는 데 사용할 수 있습니다 .


참고 : 저장된 파일의 줄 수가 항상 창의 히스토리 제한에 높이를 더한 것은 아닙니다.

페인의 히스토리 버퍼가 가득 차면 tmux 는 한 라인 만 버리지 않고 가장 오래된 10 % 라인을 버립니다. 이는 창의 유효 히스토리 깊이가 때때로 구성된 한계의 90 %만큼 낮음을 의미합니다.


1
아마도 tmux 1.3을 실행하고있을 것입니다 . 당신은 아마 tmux server-info | head -1당신의 버전을 볼 수 있습니다. tmux -Vtmux * 1.4 이상에서 작동합니다.
— 크리스 존슨

1
이것은 내가 찾은 가장 유용한 tmux 명령 중 하나입니다.
— kenny

1
그리고 이미 tmux 창에 있고 다시 시작하지 않으려면 [PrefixKey] : tmux 명령 줄로 이동하여 전체 줄을 붙여 넣으십시오. 그런 다음 [Prefix] P 대문자 P를 수행하면 좋습니다.
— Ali

1
@BradenBest SI 접두사는 장치에 연결해야합니다. "32Ki"또는 "32K"는 유효하지 않습니다. 대문자 K는 SI 접두사가 아닙니다. 혼란스런 파종 자들의 편에 서서 잘못하고있는 직업.
— Aleksandr Dubinsky

1
@BradenBest 이진 접두사는 1MB 가 정확한 의미 를 갖기 때문에 혼란을 심어 주 었지만 이제는 두 가지 의미를 갖습니다. 더구나, 십진 의미는 허위 마케팅에 사용하는 스토리지 제조업체를 제외하고 IT 산업에는 쓸모가 없습니다. 이 혼란은 실용을 거부 한 소아에 의해 시작되었습니다. 당신이 그런 pedant가 아닌 경우, 나는 내 음색에 대해 사과하고 바이너리 접두사에 대한 열정을 재고 할 것을 촉구합니다.
— Aleksandr Dubinsky 5

19

@jasonwryan의 답변 과 약간 다른 것처럼 보이는 표준 키 바인딩이 있었고 구성에서 아무것도 변경하지 않았습니다.

아래는 나를 위해 일한 요리법입니다. tmux 구성을 변경하지 않고 스크롤 백 중 일부를 빠르게 복사하려는 경우 유용 할 수 있습니다.

PrefixCtrl+b내 TMTM에서 == (tmux 1.6, 데비안 7).

  1. 선택 모드로 들어갑니다 : Prefix+ [.
  2. 선택 시작 : Space.
  3. vim 탐색을 사용하여 필요한 텍스트를 강조 표시하십시오 (예 : 화살표 키를 사용하거나을 눌러 gg출력 기록의 시작 부분에 도달).
  4. 실제로를 사용하여 내부 클립 보드에 복사하십시오 Enter. 복사 모드가 종료됩니다.
  5. vim (아마도 새로운 tmux 탭에서)을 사용하여 파일을 열고 Prefix+ 를 사용하기 전에 복사 한 내용을 붙여 넣습니다 ].
  6. 그런 다음 해당 파일의 cat을 수행하거나 필요한 방식으로 출력을 사용할 수 있습니다.

man tmux는 내 tmux가 emacs 모드에 있다는 것을 분류하는 데 도움을 주었으므로 위의 키 바인딩은 작동하지 않았습니다. man tmux는 다시 무엇을 사용 해야할지 정리하는 데 도움이되었습니다. 그러나 내가 저지른 가장 큰 실수는 내가 컨텐츠를 저장 한 호스트가 내가 tmux를 실행하는 호스트가 아니라는 것이므로 잘못된 호스트에서 저장된 파일을 계속 찾았습니다.
— Cognitiaclaeves

16

tmux 접두사 키를 사용하는 대신 명령 행에서 실행할 수있는 것을 원하는 경우 다음을 실행하십시오.

tmux capture-pane -pS -1000000

당신이 그것을 실행하고 아무것도하지 않는 것 같습니다, 그것은 화면에 방금 표시된 것을 정확하게 출력하기 때문에 동일하게 보입니다.

물론 파일로 파이프 할 수도 있습니다.

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

tmux매뉴얼 페이지를 참조하여 capture-pane더 많은 작업을 검색하십시오 (예 : 색상을 유지하려는 경우 이스케이프 시퀀스 캡처 또는 여러 줄이 새 줄을 포함하지 않을 때 결합할지 여부 지정).


1
이는 특히 허용 된 답변이 더 이상 작동하지 않기 때문에 매우 유용합니다.
— 피오 조


4

이것은 실제로 매우 쉽습니다. 언론 명령 모드를 입력 prefix key한 후 :. 그럼 어떻게 capture-pane -S -<line number you want to dump> 그런save-buffer <filepath>

이 파일에는 모든 스크롤 백 출력이 포함됩니다. 안전상의 이유로 나중에 버퍼를 삭제해야합니다.


1

tmux 세션의 모든 스크롤 백을 파일에 어떻게 쓸 수 있습니까?

~ / .tmux.conf 에서 이것을 사용 하고 이제 실행중인 쉘을 종료하면 창 출력이 고유 로그 파일에 저장됩니다.

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'                        
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.