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.