쉘 파이프를 사용하여 tmux 'clipboard'에서 복사하거나 복사하는 방법은 무엇입니까?


17

쉘 환경에서 작업 할 때 '중간 파이프 출력'을 (예 : 이미 실행중인 편집기, 다른 쉘, 다른 머신 등) 복사해야하는 경우가 종종 있습니다.

윈도우 환경에서이 문제를 해결하기위한 쉽고 일반적인 방법은 시스템 클립 보드를 통해 이루어집니다.

  • X11 : ... | xsel -i/xsel -o | ...
  • OS X : ... | pbcopy/pbpaste | ...

tmux 복사 / 붙여 넣기 기능을 사용하여 어떻게 비슷한 편리한 동작을 얻을 수 있습니까?

답변:


20

tl; dr

  • ... | tmux loadb -
  • tmux saveb - | ...

설명 및 배경

tmux에서 모든 복사 / 붙여 넣기 활동은 상단 (인덱스 0)이 가장 최근에 복사 된 텍스트 인 버퍼 스택을 거치며 버퍼 인덱스가 명시 적으로 제공되지 않은 경우 붙여 넣기에 사용됩니다 -b. tmux list-buffers또는 현재 바로 가기 tmux-prefix+로 현재 버퍼를 검사 할 수 있습니다 #.

스택 맨 위에 새로운 tmux 버퍼로 파이핑하고 set-buffer, 문자열 인수와 load-buffer파일 인수를 취하는 두 가지 방법이 있습니다 . load-bufferstdin과 함께 사용하려는 버퍼에 파이프로 연결하려면 다음 과 같이하십시오.

print -l **/* | tmux loadb -

이것을 편집기에 다시 붙여 넣는 것은 매우 분명하지만 ( tmux-prefix+ ]또는 바인딩 한 paste-buffer것) 쉘 내부에서 붙여 넣기에 액세스하는 것은 그리 중요하지 않습니다. 호스트를 호출 paste-buffer하면 붙여 넣기가 stdin에 쓰여 지기 때문에 터미널의 편집으로 끝납니다. 버퍼 및 붙여 넣기의 줄 바꿈은 셸이 지금까지 붙여 넣은 모든 것을 실행하게합니다 (잠재적으로 하루를 망칠 수있는 좋은 방법).

이것에 접근하는 몇 가지 방법이 있습니다 :

  1. tmux pasteb -s ' ': -s모든 줄 끝 (구분 기호)을 구분 기호로 바꿉니다. 그러나 여전히 동작은 paste-buffer터미널 편집 버퍼에 붙여 넣기가 끝나는 것을 의미하지만 원하는 것은 아니지만 일반적으로 그렇지 않습니다.
  2. tmux showb | ...: show-buffer표준 출력 버퍼를 인쇄하고 필요한 것 거의 것입니다,하지만 같은 크리스 욘센이 코멘트에 언급 , show-buffer수행 비 인쇄 가능한 ASCII 문자와 비 ASCII 문자 인코딩 진수. 불행히도 null로 끝나는 문자열이나 악센트가 붙은 라틴 문자 (예 : (zsh) print -N á | tmux loadb - ; tmux showb인쇄 \303\241\000) 와 같은 간단한 것들조차도 성가신 것으로 종종 부러집니다 .
  3. tmux saveb - | ...: save-buffer단순히 load-buffer원시 바이트를 반대로 바꾸고 수정하지 않은 원시 바이트를 stdin에 씁니다. 대부분의 경우에 바람직한 것입니다. 그런 다음 다른 파이프를 계속 조립할 수 있습니다 (예 : | xargs -n1 -I{} ...선로 등을 처리하기 위해 통과하십시오 .

1
tmux show-bufferC0 제어 문자 및 비 ASCII 바이트 (예 : 악센트가있는 라틴 문자 등)의 8 진 인코딩을 수행합니다. tmux save-buffer -원시 바이트를 원할 경우 사용할 수 있습니다 (보통 원하는 것임).
Chris Johnsen

@ChrisJohnsen 많은 분들께 감사드립니다.
unthought
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.