选择鼠标后如何从tmux输出复制到系统剪贴板?


82

现在,要复制到系统剪贴板,我必须通过鼠标在tmux窗口中用Shift键选择文本。然后我必须运行以下命令:

tmux save-buffer - | reattach-to-user-namespace pbcopy

是否有机会更轻松地保存到系统剪贴板?Shift键释放后,可以自动进行键绑定或更好地做到这一点。

我的tmux配置:https : //gist.github.com/3641580


这是对unix.stackexchange的类似问答。
crw 2012年

2
在MacOS上,特别是在Sierra上,有哪些工作?或更确切地说,它们都不是,有人知道吗?这个问题被标记为osx,但是答案是关于左击和中击的点击……
dwanderson

Answers:


191

如果使用的是iTerm2,则可以在Tmux会话中复制文本,按住Option键的同时拖动鼠标进行选择。

然后应该可以像往常一样用Cmd+粘贴文本到任何地方V。在这里找到它:http : //web.archive.org/web/20131226003700/http : //ootput.wordpress.com/2013/08/02/copy-and-paste-in-tmux-with-mouse/


26
不适用于tmux窗格
Jak S

41
如果您有窗格,则可以使用<alt> + <cmd> +鼠标选择进行矩形选择。
jomuller,2015年

6
矩形选择不能为窗格提供相同的功能,因为选择可以在任何列开始和结束。该解决方案与tmux无关,而与终端本身有关。窗格是tmux的核心功能。
Betamos

6
@JakS前缀+ Z缩放当前窗格。这样您就不会有问题了。除非您也处于vim拆分内部:)
dgmora

10
在终端中,您可以通过按住“ fn”键选择文本。您可以通过“ Cmd + C”复制所选文本。
fbessho

58

如果您使用iTerm2 3.x,则可以通过启用Applications in terminal may access clipboard以下功能来进行复制/粘贴:

在此处输入图片说明

只需用鼠标突出显示文本即可将其复制到OS X剪贴板中!无需按Option接受方答案中的建议进行操作。

您也可以使用常规Cmd+从OS X剪贴板粘贴到tmux V


1
所有reattach-to-user-namespace基于方法的方法都不适合我,因为我经常使用linux机器。但是,此解决方案效果很好!谢谢!
jdg

好答案。在vim中时,我仍然使用<kbd> Option </ kbd>,并且不希望鼠标激活vim选择。
乍得斯基特斯

效果很好。无需更改任何配置。谢谢。
muammar

这仅适用于tmux,但是现在如何将在该tmux中运行的vim猛禽发送到iterm和系统剪贴板?
schlow

@schlow这可能应该是一个单独的Vim + tmux StackOverflow问题,但我碰巧也使用Vim,因此我set clipboard=unnamed在vimrc中添加了该文件
Jerome Dalbert

28

还有一个类似的问题在这里回答:https : //unix.stackexchange.com/questions/15715/getting-tmux-to-copy-a-buffer-to-the-clipboard

找到的解决方案:

# 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 show-buffer | xclip -i"

另请检查:http : //awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse/

如果您设置了以下选项:

鼠标选择窗格

鼠标选择窗口

您会注意到您根本无法选择文本。

解决方案是使用Shift键。

hold down the shift key and then left click and drag across the target text. you must also hold down the shift key and then middle click in order to paste the text.

4
对于iterm,请使用Option键而不是Shift键。[如此处所述:awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse ]
gatoatigrado

2
对于MacOS,xclip -o=> pbpastexclip -i=> pbcopy
Gingi

23

对于os x,如果您使用应用程序“ Terminal”。您可以关闭鼠标滚动并使用常规的复制/粘贴功能(cmd + c / cmd + v):

set-option -g mouse-select-pane off
set-option -g mouse-resize-pane off
set-option -g mouse-select-window off
set-window-option -g mode-mouse off

或者您可以使用鼠标滚动并使用“ fn键”选择文本:

set-window-option -g mode-mouse on

16
fn钥匙的尖端是一个生命的救星!很多人建议使用,ALT但不适用于最新的Mac OS x
AK_17年

1
更好的是-结合使用fnoption以使用列模式进行选择!
Fletch

有什么方法可以更改fn键吗?使用没有fn键的外接键盘!
CentAu

@CentAu尝试改用“窗口”键
Piotrek Zatorski

17

在使用tmux 2.2或更高版本的OSX上,将以下内容添加到您的tmux.conf文件中:

bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "pbcopy"
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "pbcopy"

对于tmux 2.4版,由于他们友好地决定更改命令语法,因此应使用:

bind-key -T copy-mode MouseDragEnd1Pane send -X copy-pipe-and-cancel "pbcopy"

请注意,您可能还需要使用reattach-to-user-namespace pbcopy而不是plain pbcopy


同样在Ubuntu 16.04上,在tmux 2.1上这不再是问题。我可以只使用终端的默认复制粘贴方法。
西罗Santilli郝海东冠状病六四事件法轮功

不知道为什么它这么低,这是正确的答案!
shawkinaw

11

将其放在我的〜/ .tmux.conf文件中对我而言有效:

bind y run-shell "reattach-to-user-namespace -l zsh -c 'tmux show-buffer | pbcopy'"

我发现的所有其他潜在解决方案都是将某种空白内容复制到OSX剪贴板。

唯一的问题是,这似乎将回车符放在了粘贴内容的末尾。


3
这可行,但是在选择后仍然需要按PREFIX + y。有没有一种方法可以像在Linux终端中一样从OS X中的tmux会话复制文本?
拉斐尔·布加杰夫斯基

6

按住鼠标左键,在窗格中选择文本,然后仍然按住该按钮。然后按“ y”,这会将选择保存在剪贴板中,并退出选择/复制模式。

在这里可与iTerm 3.1.beta.5,tmux 2.5和以下配置一起使用:

### copy & paste -------------------------------------------------------
# Use vim keybindings in copy mode
setw -g mode-keys vi
# Setup 'v' to begin selection as in Vim
bind-key -T copy-mode-vi v send -X begin-selection
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"

+1最后,一个可行的最新解决方案。谢谢。-仅覆盖Enter似乎没问题,而无需before unbind
ThomasH

Tmux版本3和更高版本使用,copy-mode-vi而旧版本使用copy-mode
MutantMahesh


3

我能解决这个问题,CMD+C与选择后的文字FN+mouse drag with left button downtmux窗口Terminal的MacOS高塞拉利昂的应用程序。



1

这是我用于tmux2.8版,macOS Mojave 10.14.1和Terminal.app的解决方案。

释放鼠标按钮后,这将在复制到系统剪贴板(以及tmux缓冲区)时删除选择:

bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"

0

强大的解决方案,可与mosh + tmux + vim +嵌套会话的任意组合一起使用

在花了很多天解决这个问题之后,到目前为止,我发现的最可靠的解决方案是Suraj N. Kurapati发布的解决方案。该解决方案既可以使用(或不使用)tmux v3.2和/或vim进行本地操作,也可以使用(不使用)tmux和/或vim进行远程操作,同时使用复制模式键和简单的鼠标选择。

如果与Mike Gulick的(当前处于打开状态)请求请求结合使用,那么所有这些组合也可以与mosh一起使用。

在Mike的解决方案合并到mosh中之前,您可以使用以下方法拉动他的更改并在本地进行构建:

Ubuntu:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0 \
&& sudo apt-add-repository https://cli.github.com/packages \
&& sudo apt update \
&& sudo apt install -y gh autoconf automake perl protobuf-compiler libprotobuf-dev libncurses-dev zlib1g-dev libutempter-dev libssl-dev pkg-config \
&& mkdir -p ~/tmp/mosh \
&& git clone https://github.com/mobile-shell/mosh ~/tmp/mosh \
&& cd ~/tmp/mosh \
&& gh pr checkout 1104 \
&& ./autogen.sh \
&& ./configure \
&& make \
&& sudo make install

苹果系统:

我认为您需要先安装Apple的Xcode / Developer命令行工具(现在可以通过简单地运行gcc和退出来完成IIRC,现在可以安装它),然后运行:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" \
&& brew install gh autoconf automake
&& mkdir -p ~/tmp/mosh \
&& git clone https://github.com/mobile-shell/mosh ~/tmp/mosh \
&& cd ~/tmp/mosh \
&& gh pr checkout 1104 \
&& ./autogen.sh \
&& ./configure \
&& make \
&& sudo make install

通过这些更新,剪贴板的圣杯终于实现了!

但是,这是一个非常新的信息,因此我的职位相当不稳定。因此:

如果发生以下情况,请修改我的帖子:

  1. 我缺少依赖项等,或者
  2. gh pr checkout 1104不再需要执行Mike的更改,因为它已合并到mosh中,或者
  3. 不再需要从源代码构建,因为合并的更改已推送至brew / apt / etc软件包管理器。
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.