让 tmux 将缓冲区复制到剪贴板

让 tmux 将缓冲区复制到剪贴板

我正在尝试找出一种不错的方法来将 tmux 缓冲区中的内容复制到剪贴板中。我尝试过一些不同的事情,比如

bind-key p select-pane -t 2 \; split-window 'xsel -i -b' \; paste-buffer

这让我相当接近,我所要做的就是在执行 prefix-p 之后按下 control-d。

我尝试通过这样做来解决这个问题

bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE\; tmux paste-buffer\; echo HERE'

但这是行不通的。事实上,如果我将其配对

bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE'

它不做任何事情,所以我假设 split-window 不喜欢 shell 命令中的 << 。

有任何想法吗?

编辑:如果您愿意,您可以跳过select-pane -t 2,这并不重要。我只使用特定的布局,而窗格 2 是我在执行其他操作时更喜欢拆分的布局,以便默认情况下进入涉及拆分的绑定。

答案1

这应该有效:

# move x clipboard into tmux paste buffer
bind C-p run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer"
# move tmux copy buffer into x clipboard
bind C-y run "tmux save-buffer - | xclip -i"

答案2

copy-pipe命令是从 1.8 版本开始添加的。它将选择内容复制到 tmux 缓冲区并将其通过管道传递给命令。现在不需要前缀绑定。这是一个例子:

bind -t vi-copy y copy-pipe "xclip"

# For OS X users:
bind -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"

现在,当您在 中选择了一些文本时copy-modey会将该文本复制到 tmux 缓冲区以及操作系统剪贴板。但是,如果您想将文本从剪贴板获取到 tmux 缓冲区,则它没有帮助。

答案3

适用于 Mac OS-X 的更简单的解决方案

这建立在亚历克斯的答案的基础上,并使用了当时不存在的东西。

如果您正在使用自制的(如果你不是,为什么不是?)那么你可以这样做:

brew install reattach-to-user-namespace

然后在你的~/.tmux.conf

set-option -g default-command "reattach-to-user-namespace -l zsh" # or bash...
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 (您应该已经使用 tmux 复制了一些内容)到 Mac 粘贴板,使用<tmux-key> Control-c.现在可用于Command-vpbpaste

要从 Mac 粘贴板粘贴内容,请使用<tmux-key> Control-v.

答案4

你可能想尝试tmux-yank 插件。它可以直接复制到系统剪贴板(OS X 和 Linux)以及其他一些好处,例如拉动当前的 shell 行。

相关内容