如何使用 tmux 用鼠标复制和粘贴

mbi*_*ras 78 tmux clipboard mouse

我正在使用tmux和 OSX。从终端复制和粘贴时,tmux我可以按住Option并选择文本。但是我无法让文本留在窗格内。因此,当我想复制文本时,我需要将窗格循环到最左侧,或者缩放窗格,如下所示。

除了必须按住Option键之外,这也是一种痛苦。我知道我可以进入可视模式并使用 vim 移动来到达那里,但我宁愿有一种使用鼠标的方法。有没有人找到解决方法?

在此处输入图片说明 在此处输入图片说明

GMa*_*ter 77

将此代码块放在您的~/.tmux.conf. 这将启用鼠标集成,让您可以使用鼠标从窗格复制而无需缩放。

set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -t vi-copy    C-WheelUpPane   halfpage-up
bind -t vi-copy    C-WheelDownPane halfpage-down
bind -t emacs-copy C-WheelUpPane   halfpage-up
bind -t emacs-copy C-WheelDownPane halfpage-down

# To copy, drag to highlight text in yellow, press Enter and then release mouse
# Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "pbcopy"
Run Code Online (Sandbox Code Playgroud)

之后,重新启动您的 tmux 会话。用鼠标突出显示一些文本,但不要松开鼠标。现在,当文本仍然突出显示并按下鼠标时,按返回键。突出显示的文本将消失并复制到剪贴板。现在松开鼠标。

除此之外,您还可以使用鼠标执行一些很酷的操作,例如上下滚动、选择活动窗格等。

如果您在 macOS上使用更新版本的 tmux,请尝试以下而不是上面的:

# macOS only
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -T copy-mode-vi    C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-vi    C-WheelDownPane send-keys -X halfpage-down
bind -T copy-mode-emacs C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-emacs C-WheelDownPane send-keys -X halfpage-down

# To copy, left click and drag to highlight text in yellow, 
# once you release left click yellow text will disappear and will automatically be available in clibboard
# # Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"
Run Code Online (Sandbox Code Playgroud)

如果在 macOS 上使用 iTerm,请转到 iTerm2 > 首选项 > “常规”选项卡,然后在“选择”部分中,选中“终端中的应用程序可以访问剪贴板”。

如果您使用的是Linux和更新版本的 tmux,那么

# Linux only
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -T copy-mode-vi    C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-vi    C-WheelDownPane send-keys -X halfpage-down
bind -T copy-mode-emacs C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-emacs C-WheelDownPane send-keys -X halfpage-down

# To copy, left click and drag to highlight text in yellow, 
# once you release left click yellow text will disappear and will automatically be available in clibboard
# # Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -selection c"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
Run Code Online (Sandbox Code Playgroud)

在 Debian 和基于 Debian 的发行版(Ubuntu、Kali)中,您可能需要安装xclip

sudo apt-get install -y xclip
Run Code Online (Sandbox Code Playgroud)

(您也可以查看https://github.com/gpakosz/.tmux以了解许多其他 tmux 选项。)

  • 谢谢!奇迹般有效。不过,我需要安装`sudo apt-get install -y xclip`(Ubuntu Linux)。 (5认同)
  • 终于有真正有效的东西了!复制和粘贴是尝试 tmux 时最烦人的事情,我之前已经放弃了,而且我尝试的配置片段的行为不一致,非常感谢人。 (4认同)
  • 我在 mac 中使用 iterm,必须启用 iTerm2 > 首选项 >“常规”选项卡,并在“选择”部分中,“终端中的应用程序可以访问剪贴板”。参考:http://www.rushiagr.com/blog/2016/06/16/everything-you-need-to-know-about-tmux-copy-pasting/ (2认同)
  • 这对我有用。但是我觉得这很好奇这需要多少配置。我觉得只要有 tmux-yank 或其他东西就可以了。如果有人对 tmux yank 和鼠标支持有一个非常小的配置,我会感兴趣......我一生都无法弄清楚为什么这对我不起作用(注意:我的设置包括 ubuntu 18、tmux 2.6、在 zsh 5.4.2 中运行 [tmux-yank 提到了一些关于 zsh 的 bindkey -e 的内容?),在默认终端上) (2认同)
  • 您不需要重新启动 tmux 会话。您可以在会话开启时简单地执行“source-file ~/.tmux.conf”。我当然不想关闭十个会话,每个会话有 3 个窗口,每个窗口包含多个窗格。 (2认同)

小智 19

在 ~/.tmux.conf 中添加这两行

set -g @plugin 'tmux-plugins/tmux-yank'
set -g mouse on
Run Code Online (Sandbox Code Playgroud)

然后安装适合我的插件。

https://github.com/tmux-plugins/tmux-yank

  • 我还必须添加以下内容:`set -g @yank_selection_mouse 'clipboard'`。当您用鼠标选择时,它将复制到剪贴板。 (9认同)
  • 这条评论就是我一直在寻找的答案。应该推广。 (3认同)

小智 9

Ubuntu 20.04 中什么对我有用

  • 我打开了鼠标模式
  • Shift按住+ 用光标选择文本
  • 发布Shift选择文本后
  • 复制文字Ctrl++Shiftc
  • 粘贴任意位置(自身之外tmuxCtrl+ v,因为这会将文本复制到系统剪贴板上


Eri*_*got 8

tmux 有自己的内部剪贴板,不会复制到系统剪贴板。

由于您使用的是 macOS,因此您可以简单地要求 tmux 将其剪贴板传输到系统剪贴板(通常的剪贴板)。这是通过下面的命令完成的,为了方便起见,可以将其绑定到 Ctrl-b Ctrl-c (如果您使用标准 Ctrl-b 来调用 tmux 命令).tmux.conf

bind C-c run "tmux save-buffer - | pbcopy"  # Copy to macOS
Run Code Online (Sandbox Code Playgroud)

因此,您可以在使用 tmux 时简单地用鼠标选择文本(无需按任何键)。tmux 很棒,因为它只会选择当前窗格中的文本(即使您并排有多个窗格)。该文本被复制到 tmux 的内部剪贴板。然后,您可以简单地使用 Ctrl-b Ctrl-c 将其传输到系统剪贴板