私は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 がプッシュされたら、選択範囲をtmux選択範囲にコピーし、xclip
を使用してシステムクリップボードにエクスポートします。
残念ながら、これを行おうとすると、次のようになります。
.tmux.conf: 14: unknown command: copy-selection && run "tmux save-buffer | xclip -selection clipboard"
Tmux構成でこれを行う方法はありますか?
こちら も回答しましたが、使い方を理解するのに少し時間がかかったので、混乱している人のために説明します。
これは基本的にあなたが行っている設定です:
(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
[
を押して、コピーモードに入ります。次に、Space
に続いて任意のvi移動キーを押して、選択を行います。次に、Enter
を押す代わりにy
を押すと、選択範囲がクリップボードにコピーされます。
注:これは、viキーでtmuxのデフォルトのバインディングを使用していることを前提としています。
Tmuxには、モードごとに異なるキーバインディングテーブルがあります。したがって、bind-key -t vi-copy y
は、コピーモードでy
キーのアクションを設定します。最初は、選択を行った後でEnter
を押すことに慣れていたので混乱しました。 Enter
は、実際にはcopy-selection
コマンドのデフォルトのキーバインディングです(コピーモードの場合)。 copy-pipe
コマンドを使用すると、選択範囲をコマンド(この場合はxclip
)にパイプするために新しいキーをバインドできます。
list-keys -t vi-copy
を実行すると、コピーモードのすべてのキーバインディングを確認できます。
いくつかの技術的な問題が発生しています。
「特殊モード」バインディング(例:vi-copy
)…
run-Shell
a.k.a. run
は使用できません)。;
で区切ることができます。シェルの&&
コマンドセパレーターは使用できません)。tmux1.8にはcopy-pipe
があります。
bind-key -t vi-copy y copy-pipe 'xclip -selection clipboard >/dev/null'
(このようなバインディングが the FAQ にリストされています。)
Tmuxのtmux-yankプラグインを見てください。 https://github.com/tmux-plugins/tmux-yank
Tmuxからシステムクリップボードにコピー/貼り付けする自動化された方法を提供します。 OSX/Linux/Cygwinシステムで動作します。
MacOSの場合、この行を.tmux.conf
に追加できます
bind -t vi-copy y copy-pipe 'pbcopy'
これが、tmux 2.2を使用してxclipをインストールした結果です。 Vimスタイルのコピーの場合、.tmux.confに以下を追加します
bind Escape copy-mode
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
# Vim style copy to clipboard
bind-key -t vi-copy y copy-pipe "xclip -selection c > /dev/null"
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"
ここで、コピーモードの場合、PREFIX vは選択を開始し、PREFIX yはクリップボードにコピーします。 PREFIX pを使用して、ターミナルに貼り付けることができます。
Waylandでは、xclip
の代わりに、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"
update:X11、Wayland、およびCygwinで同じ tmux.conf を使用しているため、次の構成になります。
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'"