我正在尝试找出一种不错的方法来将 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-mode
,y会将该文本复制到 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-v
或pbpaste
要从 Mac 粘贴板粘贴内容,请使用<tmux-key> Control-v
.
答案4
你可能想尝试tmux-yank 插件。它可以直接复制到系统剪贴板(OS X 和 Linux)以及其他一些好处,例如拉动当前的 shell 行。