tmux의 vi-copy 모드에서 시스템 클립보드 사용

tmux의 vi-copy 모드에서 시스템 클립보드 사용

저는 tmux 1.6을 실행 중이고 vi 스타일 키 바인딩을 사용하고 대화형 모드에서 복사할 때 시스템 클립보드를 사용하도록 구성하려고 합니다.

set-window-option -g mode-keys vi

bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' "copy-selection && run \"tmux save-buffer | xclip -selection clipboard\""

C즉, + 작업을 수행 [한 다음 를 v사용하여 복사할 텍스트 선택을 시작한 다음 y눌렀을 때 select 를 사용하여 선택 항목을 tmux에 복사한 다음 을 사용하여 시스템 클립보드로 내보낼 수 있기를 원합니다 xclip.

불행히도 이 작업을 시도하면 다음과 같은 내용이 표시됩니다.

.tmux.conf: 14: unknown command: copy-selection && run "tmux save-buffer | xclip -selection clipboard"

tmux 구성에서 이를 수행할 수 있는 방법이 있습니까?

답변1

이것도 답변됨여기, 하지만 사용법을 이해하는 데 시간이 좀 걸렸기 때문에 헷갈리시는 분들을 위해 설명하겠습니다.

이것은 기본적으로 원하는 설정입니다.

(tmux의 경우버전 <2.5)

bind -t vi-copy y copy-pipe 'xclip -in -selection clipboard'

(tmux의 경우버전>=2.5)

bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'

그런 다음 클릭하여 Ctrl+b [복사 모드로 들어갑니다. 그런 다음 Spacevi 이동 키를 눌러 선택하십시오. 그런 다음 Enter클릭하는 대신 클릭 y하면 선택 항목이 클립보드에 복사됩니다.

참고: 이는 vi 키와 함께 tmux의 기본 바인딩을 사용한다고 가정합니다.

Tmux에는 모드마다 다른 키 바인딩 테이블이 있습니다. 따라서 복사 모드에서 키 작동을 설정하십시오 bind-key -t vi-copy y. 처음에는 선택 후 공을 치는 y것이 익숙해 져서 혼란 스러웠습니다 . 실제로는 명령에 대한 기본 키 바인딩입니다(복사 모드에서). 이 명령을 사용하면 새 키를 바인딩하여 선택 사항을 명령에 전달할 수 있습니다(이 경우 ) .EnterEntercopy-selectioncopy-pipexclip

를 실행하면 복사 모드에 대한 모든 키 바인딩을 볼 수 있습니다 list-keys -t vi-copy.

답변2

업데이트된 버전은벤 데이비스 답변

tmux 2.4와 호환

bind -T copy-mode-vi y send -X copy-pipe "xclip -selection c"

답변3

나는 여기저기서 많은 것을 시도했지만 이것이 Ubuntu 20 LTS 및 tmux3.0a를 사용하는 내 파일에서 나에게 ~/.tmux.conf도움이 된 것 입니다.

#for copying to sys clipboard
bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
bind -T copy-mode-vi C-j send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"

#general other stuff
set -g default-terminal "xterm-256color"
set -g mouse on
set-window-option -g mode-keys vi
                                         

답변4

xclipWayland에서는 대신 wl-clipboard 패키지의 /를 사용하는 것이 더 좋습니다 wl-copy. wl-paste이것은 나에게 효과적입니다.

set-window-option -g mode-keys vi
bind-key -T copy-mode-vi 'v' send-keys -X begin-selection
bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel "wl-copy"
bind C-p run "wl-paste --no-newline | tmux load-buffer - ; tmux paste-buffer"

고쳐 쓰다:같은걸 사용하기 때문에tmux.confX11, Wayland 및 Cygwin에서는 다음 구성으로 끝났습니다.

bind-key -T copy-mode-vi v send -X begin-selection

if-shell -b 'echo $XDG_SESSION_TYPE | grep -q x11' "\
    bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard > /dev/null'; \
    bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard > /dev/null'; \
    bind-key C-p run 'xclip -out -selection clipboard | tmux load-buffer - ; tmux paste-buffer'"

if-shell -b 'echo $XDG_SESSION_TYPE | grep -q wayland' "\
    bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel 'wl-copy'; \
    bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'wl-copy'; \
    bind-key C-p run 'wl-paste --no-newline | tmux load-buffer - ; tmux paste-buffer'" "\
    \
    bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel 'cat - >/dev/clipboard'; \
    bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'cat - >/dev/clipboard'; \
    bind-key C-p run 'cat /dev/clipboard | tmux load-buffer - ; tmux paste-buffer'"

관련 정보