tmux와 클립 보드간에 선택한 텍스트 복사 / 붙여 넣기


15

최신 버전의 tmux (git 저장소에서) 및 xclip (0.12)을 실행 중이며 Emacs와 같은 키보드 바인딩을 사용하여 텍스트 copy-mode, 복사 ( M-w) 선택 사항을 클립 보드로 이동하고, C-y복사 버퍼에서 클립 보드로 붙여 넣기 ( )합니다.

지금까지 나는 텍스트를 붙여 넣기 할 수 있었다 C-y, 그리고에서 이동 copy-mode이맥스와 같은 키보드 바인딩,하지만 난 여전히 텍스트를 복사 할 수 없습니다입니다 (예에서 TMUX 버퍼에서 copy-mode)

전체 버퍼를 클립 보드 (또는 그 반대로)에 복사하는 이 스레드 를 찾았 지만 작동하지 않는 것 같습니다.

또한 tmux-users메일 목록 에서 최신 버전의 tmux (git repo에서만)는이라는 명령을 제공한다고 들었습니다 copy-pipe. 매뉴얼 페이지에이 명령에 대한 다음 내용이 있습니다.

의 한 명령은 copy-pipe 인수를 허용합니다. copy-pipe는 선택 항목을 복사하여 명령에 파이프합니다. 예를 들어 다음은 'C-q'를 바인딩하여 선택을 붙여 넣기 버퍼뿐만 아니라 / tmp에 복사합니다.

       bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"

copy-pipe선택을 다른 명령으로 파이프하기 위해 부분적으로 사용되는 것처럼 보입니다 . 이 설명과 명령에 오타가있는 것 같습니다 (무엇 temacs-copy입니까?)

어느 쪽이든, 내가하고 싶은 것은 :

사자:

  1. 복사 모드 들어가기
  2. 내가 (즉, 이맥스 탐색 명령을 사용하여 복사 할 텍스트로 이동 C-f, C-b, M-f, M-b, C-a, C-e커서를 이동하는 등). 이들 중 접두사 가 없습니다.
  3. 다음을 사용하여 선택한 텍스트를 클립 보드에 복사하십시오 M-w( 접두사 없음 ).

붙여 넣기 :

  1. 내가 입력 할 수 싶습니다 C-y( 없이 입력 할 필요 copy-mode(터미널에 텍스트를 붙여) 국번없이 중)

운없이 복사하기 위해 다음을 시도했습니다.

bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard" 

그러나 붙여 넣기는 훌륭합니다.

bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"

이상한 점은 명령 행에서 클립 보드에 내용을 복사 할 수xclip -i -selection clipboard 있기 때문에 위의 복사 명령 의 " "부분이 잘 작동 한다는 것입니다. 예 :

echo "Hello world. How are you?" | xclip -i -selection clipboard

이 모든 것을 어떻게 복사 모드에서 클립 보드로 선택 물을 복사 할 수 있습니까?

답변:


19

새 버전의 tmux (1.8+)에서 다음 tmux.conf을 사용하십시오 copy-pipe.

set -g mouse on
# To copy:
bind-key -n -t emacs-copy M-w copy-pipe "xclip -i -sel p -f | xclip -i -sel c "

# To paste:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
  1. prefix+[ 복사 모드로
  2. 마우스로 콘텐츠 선택 (누르기)
  3. M-w 해당 부분을 시스템 클립 보드에 복사
  4. C-yC-v웹 브라우저와 같은 다른 일반 응용 프로그램에 붙여 넣으려면 tmux 에 붙여 넣으십시오.

이 답변은 더 많은 찬사를받을 가치가 있으며 Linux 기반 설정에 가장 적합합니다.
Louis Kottmann

tmux 2.0에서는 그 run-shell대신에run
roign

@LouisKottmann : 왜 리눅스 기반입니까?
schaiba

나는 다른 시스템에 대해 언급 할 수 없지만, 나는 맥 사용은 일반적으로 XCLIP 대신 bpaste 생각
루이 KOTTMANN

tmux 2.8에서는로 변경해야했습니다 bind -Tcopy-mode M-w send-keys -X copy-pipe "xclip -i -sel p -f | xclip -i -sel c ". bind-key -n C-y run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer" 에 따라 이 커밋 에 의해 제안 starfry
azzamsa

5

이 커밋 이후로 Tmux 2.4 에서는 바인딩 구문이 변경되었습니다. 변경 사항을 간단히 요약하기 위해이 Github 주석 을 역설 합니다 .

  1. 바꾸다 -t-T
  2. 바꾸다 vi-<name><name>-mode-vi
  3. 명령 접두사 send-keys -X

나는했다 :

bind-key -n -t vi-copy Enter copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'
bind-key -n -t vi-copy MouseDragEnd1Pane copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'

변경해야 할 부분은 다음과 같습니다.

bind-key -n -T copy-mode-vi Enter send-keys -X copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'
bind-key -n -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'

로부터 변경 내역 :

키 테이블이 크게 변경되었습니다. 모드 키 테이블은 더 이상 기본 키 테이블과 분리되지 않습니다. 바인드 키 및 바인드 해제 키에 -t 플래그와 함께 모든 모드 키 테이블이 제거되었습니다.

emacs-edit, vi-edit, emacs-choose 및 vi-choose 테이블이 명령 프롬프트에서 고정 키 바인딩으로 바뀌고 모드를 선택했습니다. 모드 키 및 상태 키 옵션은 그대로 유지됩니다.

emacs-copy 및 vi-copy 테이블은 copy-mode 및 copy-mode-vi 테이블로 대체되었습니다. 명령은 -X 및 -N 플래그를 사용하여 전송 키로 전송됩니다. 그래서 다음과 같이 :

bind -temacs-copy C-Up scroll-up
bind -temacs-copy -R5 WheelUpPane scroll-up

된다 :

bind -Tcopy-mode C-Up send -X scroll-up
bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up

이러한 변경으로 전체 명령 파서 (명령 시퀀스 포함) 및 명령 세트를 사용할 수 있습니다. 예를 들어, 편집 및 히스토리가있는 일반 명령 프롬프트는 이제 사용자 정의 명령 대신 검색, 점프 등을 위해 사용됩니다. 기본 Cr 바인딩은 다음과 같습니다.

bind -Tcopy-mode C-r command-prompt -p'search up' "send -X search-backward-incremental '%%'"

copy-pipe-and-cancel과 같이 send -X와 함께 사용할 수있는 새로운 명령도 있습니다.


2

-temacs-copy오타가 아닙니다. 선행 대시는 이것이 옵션에 bind-keys대한 인수와 함께 명령에 대한 옵션임을 의미합니다 . 그것은-t emacs-copy더 좋아 .

복사 모드는 "일반 모드" 와 다른 바인딩 및 명령 세트 1 을 사용합니다. 이 copy-pipe명령은 대체 "모드"바인딩 테이블에서만 사용할 수 있습니다. 때 mode-keys이다 emacs, 모드는 사용 복사 emacs-copy당신이 Mw가 결합 할 필요가 있으므로, 테이블을 copy-pipe해당 테이블에.

bind-key -temacs-copy M-w copy-pipe "xclip -i -selection clipboard"

너무 많은 "접두사 없음"바인딩을 만들도록주의하십시오. tmux 내부에서 실행중인 프로그램에 해당 바인딩 된 키를 입력하기가 어렵습니다 (예 : tmux 내부에서 실행되는 Emacs 의 tty 모드 인스턴스에 Cy를 입력하려는 경우 ). 을 수행하는 일부 키를 항상 (접두사) 바인딩 할 수 있지만 자주 필요한 경우 입력하는 것이 더 번거로울 수 있습니다.send-keys C-y


1 이동 및 편집 명령 만 사용할 수 있습니다. 를 제외 copy-pipe하고 이러한 명령은 인수를 사용하지 않습니다 (이것은 매뉴얼 페이지에서 "하나의 명령은 인수를 받아들입니다"라는 의미입니다. "in"은 오타 나 편집 실수 일 수 있습니다).


2

다른 답변이 도움이 될 수 있지만 다음과 같이하십시오.

  • 커서로 텍스트를 Shift + 선택합니다.
  • 텍스트를 클립 보드에 복사하려면 Ctrl + Shift + C를 누르십시오.

이것은 정답이지만 둘 이상의 창을 가로로 배열하면 문제가 시작됩니다.
cjauvin

나는 당신이 그것에 유용한 무언가를 찾으면 알려주십시오.
리샤 아그라 하리
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.