如何创建一个单独的命令以从我的 tmux 剪贴板复制到我的 Linux 剪贴板?

如何创建一个单独的命令以从我的 tmux 剪贴板复制到我的 Linux 剪贴板?

我正在尝试在 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 完成。

相关内容