我正在尝试在 Linux 中模拟在 OSX 中起作用的以下绑定:
# Copy and paste from system clipboard
bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy"
bind C-v run "reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"
也就是说,我想绑定一个命令来明确地将 tmux 缓冲区复制到我的系统剪贴板中,并绑定另一个命令来复制回来。我不要想要自动使用 vi-select 从 tmux 复制到我的系统剪贴板,因为许多现有的答案地址。
我已尝试以下绑定(一次一个)。
bind C-c run "tmux save-buffer - | xclip -in -selection clipboard"
bind C-c run "tmux show-buffer | xclip -sel clip -i"
它们在第一次使用时似乎都做了正确的事情,但随后产生了严重的副作用:使用后禁用我所有的 tmux 键绑定。
也就是说,第一次复制之后,我的 tmux 键绑定均不起作用。
如何才能明确地将某些内容从 tmux 剪贴板复制到系统剪贴板以及反之亦然,且不禁用我运行进一步 tmux 命令的能力?
答案1
xclip 有一个 bug,它不会关闭 stdout,这意味着 tmux 不知道它已经完成。这就是为什么在第一次复制之后你不能再运行任何 tmux 命令。因此你可以:
1)使用 xsel 代替 xclip,这样不会遇到同样的问题。
2)将 stdout 重定向到/dev/null
如下位置:xclip ... >/dev/null
3)使用run -b
而不是run
这样 tmux 就不会等待 xclip 完成。