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コピーするテキストの選択を開始し、押したときにyselectを使用して選択内容を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-copywl-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'"

関連情報