在tmux中以vi-copy模式使用系统剪贴板


50

我正在运行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配置中做到这一点?

Answers:


86

这在这里也得到了回答,但是我花了一些时间来了解如何使用它,所以我将为其他困惑的人进行解释。

这基本上是您要使用的设置:

(对于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移动键进行选择。然后,而不是Enterhit,hit y和选择将被复制到剪贴板。

注意:这假设您正在使用带有vi键的tmux默认绑定。

Tmux针对不同的模式具有不同的键绑定表。因此,在复制模式下bind-key -t vi-copy y设置y键的操作。最初,我很困惑,因为我习惯于Enter做出选择之后打球。Enter实际上只是copy-selection命令的默认键绑定(在复制模式下)。该copy-pipe命令允许我们绑定一个新键,以将选择内容通过管道传递给命令,在本例中为xclip

您可以通过运行来查看复制模式下的所有键绑定list-keys -t vi-copy


非常感谢,我不得不下载并编译tmux 1.9a,但这并不困难,现在可以正常工作了!
Naftuli Kay 2014年

3
如果不起作用,请仔细检查系统中xclip是否已实际安装(默认情况下未在Ubuntu上安装,您需要sudo apt-get install xclip获取它)
ecerulm 2015年

3
对于OSX,更换xclippbcopy。对于Windows上的Cygwin,将其替换为putclip(从cygutils-extra包装中)。
SnoringFrog

5
此博客文章的以下绑定在Tmux 2.6上也很好用,并且在复制时没有在屏幕上放置看似随机字符的缺点:bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
Matthias Braun

1
直到我从.tmux.conf:中删除了这一行,这对我来说才行set -g mouse on。这应该启用“鼠标模式”,但是即使将其删除,有关我的鼠标的所有功能都可以正常工作(滚动轮,鼠标选择工作)...
ndemou

11

本戴维斯答案的更新版本

与tmux 2.4兼容

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

4
我发现与copy-pipe-and-cancel相比,效果更好copy-pipe。这是tmux 2.5上的内容
wreckgar23'7

6

您遇到了两个技术问题:
“特殊模式”绑定(例如vi-copy)……

  1. 使用不同的命令集(即run-shellaka run不可用),并且
  2. 没有绑定多个命令的能力(通常可以使用;-Shell的&&命令分隔符将其分隔)。

tmux 1.8具有copy-pipe,但可能会有所帮助:

bind-key -t vi-copy y copy-pipe 'xclip -selection clipboard >/dev/null'

(在FAQ中列出了这样的绑定。)


1
我有tmux 1.8,这似乎不起作用。(编辑)gh,我讨厌在Enter上提交的textarea输入。无论如何,我添加了此键绑定,但是当我执行<prefix> -y并单击[space]时,内容不会复制到剪贴板。
本·戴维斯

只是想通了。我不了解“ vi-copy”键绑定表的工作方式。
本·戴维斯


2

对于macOS,您可以将此行添加到 .tmux.conf

bind -t vi-copy y copy-pipe 'pbcopy'


macOS用户,对于tmux> = 2.5:bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'
Dai

1

这就是使用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可用于粘贴到终端中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.