모든 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당신이 원하는 무엇이든 함께.

(기본값 prefixctrl + 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.