我正在运行 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 配置中做到这一点?
答案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
[
进入复制模式。然后Space
按任意 vi 移动键进行选择。然后,不要点击Enter
,而是点击y
,所选内容将被复制到剪贴板。
注意:这假设您使用 tmux 的默认绑定与 vi 键。
Tmux 对于不同的模式有不同的键绑定表。因此,设置复制模式下按键bind-key -t vi-copy y
的操作。y
最初,我很困惑,因为我习惯了Enter
选择后就击球。Enter
实际上只是copy-selection
命令的默认键绑定(在复制模式下)。该copy-pipe
命令允许我们绑定一个新键以将选择传递给命令,在本例中为xclip
。
您可以通过运行查看复制模式的所有键绑定list-keys -t vi-copy
。
答案2
答案3
我到处尝试了很多东西,但这就是我在我的~/.tmux.conf
文件中起作用的东西我正在使用 Ubuntu 20 LTS 和 tmux3.0a
#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
xclip
在 Wayland 上,最好使用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.conf在 X11、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'"