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

Posted

技术标签:

【中文标题】鼠标选择后如何从 tmux 输出复制到系统剪贴板?【英文标题】:How to copy to system clipboard from tmux output after mouse selection? 【发布时间】:2012-08-30 12:38:31 【问题描述】:

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

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

是否有机会更轻松地保存到系统剪贴板?键绑定或更好地在 Shift 释放后自动执行。

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

【问题讨论】:

这是unix.stackexchange上的类似问答。 这些都可以在 MacOS 上运行,特别是 Sierra?或者更确切地说,他们都没有,有谁知道会怎样?这个问题被标记为osx,但答案是关于左键和中键... 【参考方案1】:

如果您使用的是 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/

【讨论】:

对 tmux 窗格没有帮助 如果您有窗格,可以使用 + + 鼠标选择进行矩形选择。 矩形选择不为窗格提供相同的功能,因为选择可以在任何列开始和结束。此解决方案与 tmux 无关,而是与终端本身有关。窗格是 tmux 的核心功能。 @JakS 前缀+Z 缩放当前窗格。那你就不会有这个问题了。除非你也在 vim split 中:) 在终端中,您可以通过按住“fn”键来选择文本。可以通过“Cmd+C”复制选中的文本。【参考方案2】:

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

只需用鼠标突出显示文本即可将其复制到 macOS 剪贴板中!无需按接受者答案中的建议按 Option

您也可以使用通常的 Cmd + V 从 macOS 剪贴板粘贴到 tmux。

【讨论】:

所有基于reattach-to-user-namespace 的方法都不适合我,因为我经常通过 ssh 连接到 linux 机器。但是,此解决方案效果很好!谢谢! 很好的答案。当我在 vim 中并且不希望鼠标激活 vim 选择时,我仍然使用 Option 这很好用。无需更改任何配置。谢谢。 这仅适用于 tmux,但现在如何将在该 tmux 中运行的 vim yanks 发送到 iterm 和系统剪贴板?? @schlow 这可能应该是一个单独的 Vim+tmux *** 问题,但我碰巧也使用 Vim,为此我在 vimrc 中添加了set clipboard=unnamed【参考方案3】:

对于 os x,如果您使用应用程序“终端”。您可以关闭鼠标滚动并使用常用的复制/粘贴功能(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

【讨论】:

fn 关键提示是救生员!很多人建议使用ALT,但它不适用于最新的 Mac OS x 更好 - 结合 fnoption 以使用列模式进行选择! 有什么方法可以改变 fn 键?使用没有 fn 键的外接键盘! @CentAu 尝试使用“Window”键 酷!现在,需要set-option -g mouse off【参考方案4】:

这里回答了一个类似的问题: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.

【讨论】:

对于 iterm,使用 option 键而不是 shift 键。 [这里提到:awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse] 对于 MacOS,xclip -o => pbpastexclip -i => pbcopy【参考方案5】:

在使用 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 而不是普通的pbcopy

【讨论】:

同样在 Ubuntu 16.04 上,这不再是 tmux 2.1 上的问题。我可以使用终端默认的复制粘贴方法。 不知道为什么这个排名如此之低,这是正确的答案! 这很好用!谢谢!【参考方案6】:

把它放在我的 ~/.tmux.conf 文件中对我有用:

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

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

唯一的问题是,这似乎在粘贴内容的末尾添加了一个回车。

【讨论】:

这可行,但仍需要您在做出选择后按 PREFIX+y。有没有办法像在 Linux 终端中一样选择它来从 OS X 中的 tmux 会话中复制文本?【参考方案7】:

按shift键然后鼠标点击!!检查此链接。 http://awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse/

【讨论】:

这个问题很老了,你的解决方案不适合与 iTerm 一起使用。当前接受的答案是正确的。 这适用于 Gnome 终端,但这个问题询问的是 OSX【参考方案8】:

按住鼠标左键,在窗格中选择文本并按住该按钮。然后按“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 最后,一个有效的最新解决方案。谢谢。 - 无需事先 unbind 即可覆盖 Enter 似乎没问题。 Tmux 3 及以上版本使用copy-mode-vi,而旧版本使用copy-mode【参考方案9】:

在 macOS High Sierra 的Terminal 应用程序中从tmux 窗口中选择带有FN+mouse drag with left button down 的文本后,我能够使用CMD+C 解决此问题。

【讨论】:

【参考方案10】:

这是我用于tmux 2.8 版、macOS Mojave 10.14.1 和 Terminal.app 的解决方案。

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

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

【讨论】:

【参考方案11】:

一种强大的解决方案,适用于 mosh + tmux + vim + 嵌套会话的任意组合

在花了很多天解决这个问题之后,到目前为止,我发现的最强大的解决方案是 Suraj N. Kurapati 的 posted solution。该解决方案在本地使用(和不使用)tmux v3.2 和/或 vim,以及使用(和不使用)tmux 和/或 vim 远程工作,同时使用- 模式键和简单的鼠标选择。

如果与 Mike Gulick 的(目前开放)pull request 结合使用,所有这些组合也适用于 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

macOS:

我认为您需要先安装 Apple 的 Xcode/Developer 命令行工具(IIRC,现在只需运行 gcc 并退出即可完成),然后运行:

/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

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

但是,这是非常新的信息,因此我的这篇文章相当不稳定。因此:

如果出现以下情况,请修改我的帖子:

    我缺少依赖项等,或者 不再需要对 Mike 的更改执行 gh pr checkout 1104,因为它已合并到 mosh 中,或者 不再需要从源代码构建,因为合并的更改已推送到 brew/apt/etc 包管理器。

【讨论】:

【参考方案12】:

我今天使用 netcat 制作了一个非常简单的版本。

https://github.com/base698/tmux-copy-paste-mac-osx

这里是 tmux.conf:

bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-pipe 'nc localhost 5682'
bind p run-shell 'nc localhost 5683; nc localhost 5683 | tmux load-buffer -' \; paste-buffer

在 1.8 中也可以使用鼠标

【讨论】:

【参考方案13】:

在 macOS 终端 Tmux 上,从特定窗格复制:

    按住选项(光标变为十字准线)[参见下面的 *] 单击并拖动以选择文本 使用 CMD-C/V 照常复制/粘贴

*您可能需要使用 CMD-R 切换“允许鼠标报告”(请参阅​​终端、视图-...)。我发现我经常将其切换为在 tmux 窗格中使用鼠标滚动或复制粘贴。


在我的.tmux.conf 中,我包含set -g mouse on

这是在 macOS Catalina 上,tmux 3.1c

【讨论】:

【参考方案14】:

对于那些在 tmux 现在在 mac 中寻找选择如何工作的人:使用“fn”键来选择、复制和粘贴。

【讨论】:

【参考方案15】:

monterey macosx 终端 2.21,默认设置通过 ssh 连接到一台运行 tmux 2.6 的机器,有几个窗格,tmux 配置就这么简单:

set -g mouse on

要复制 - 按住 ? Fn 按钮并使用鼠标选择您需要的内容,然后按 ⌘ Command + C,等等,文本在缓冲区中你的 Mac。

【讨论】:

当我使用它并滚动以从历史记录中选择更多文本时,它不会显示历史记录。你也有这种情况吗?

以上是关于鼠标选择后如何从 tmux 输出复制到系统剪贴板?的主要内容,如果未能解决你的问题,请参考以下文章

tmux开启鼠标

c#如何获取鼠标选取的内容

怎么复制文件到另一个文件夹上?

使用 Bash for Windows 复制到剪贴板

如何禁用vim粘贴到/从系统剪贴板?

如何在Vim中复制到剪贴板?