使用鼠标恢复tmux中的旧复制粘贴行为


111

这是我以前在tmux中执行的操作,用于复制粘贴(使用鼠标,键盘的工作方式不同,这不是我感兴趣的):

  1. 用鼠标选择文本,按下鼠标左键
  2. 用中键粘贴文本

我已经升级了操作系统,这已经获得了新的tmux版本。我尚未更改.tmux.conf配置文件。

这是我对目前的版本做tmux1.6(它来自于最新的Linux crunchbang预包装):

  1. 用鼠标,按下的左键 shift按键选择文本
  2. 用中键粘贴文本
  3. 终端被阻塞,一个小信息区域在当前窗格的右上角显示一些数字(即[0/24],可能与粘贴了多少个字符有关),对我来说意义不大,我不需要/不需要(编辑:似乎copy-mode是在这里自动输入的)
  4. 我必须q按键才能再次获得功能终端。

对于我每天要做数十次的事情来说,这太麻烦了。如何使旧机制重新起作用?


2
在我的终端中stShift+ MouseMiddle像传统行为一样粘贴Xselection。FWIW,MouseMiddle如果没有修饰符,则无济于事。
nabin-info

Answers:


84

要恢复默认的复制/粘贴配置,您需要(至少暂时)关闭tmux中的鼠标支持:

prefix : set -g mouse off

prefixtmux访问密钥在哪里(默认情况下为Ctrl+ B,除非您重新映射它)。:启动命令模式并set -g全局设置参数。

关闭鼠标模式后,操作系统提供的标准复制/粘贴功能将按预期工作。

您可能想要做的另一件事是“最大化”当前窗格,因此您可以轻松地复制多行。


如果您使用的是旧版(2.1之前的版本)tmux,则需要使用以下内容:

prefix : set -g mode-mouse off

这里有更多详细信息和一些便捷的按键绑定可自动执行所有操作:

http://tangledhelix.com/blog/2012/07/16/tmux-and-mouse-mode/

上面链接的文章的主要目的是.tmux.conf的摘录:

# disable mouse control by default - change 'off' to 'on' to enable by default.
setw -g mode-mouse off
set-option -g mouse-resize-pane off
set-option -g mouse-select-pane off
set-option -g mouse-select-window off
# toggle mouse mode to allow mouse copy/paste
# set mouse on with prefix m
bind m \
    set -g mode-mouse on \;\
    set -g mouse-resize-pane on \;\
    set -g mouse-select-pane on \;\
    set -g mouse-select-window on \;\
    display 'Mouse: ON'
# set mouse off with prefix M
bind M \
    set -g mode-mouse off \;\
    set -g mouse-resize-pane off \;\
    set -g mouse-select-pane off \;\
    set -g mouse-select-window off \;\
    display 'Mouse: OFF'
# zoom this pane to full screen
bind + \
    new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \;\
    swap-pane -s tmux-zoom.0 \;\
    select-window -t tmux-zoom
# restore this pane
bind - \
    last-window \;\
    swap-pane -s tmux-zoom.0 \;\
    kill-window -t tmux-zoom

13
如果您使用的是tmux 1.8或更高版本,则有一个内置命令Control-B z,它将切换当前窗格的缩放状态。因此CB z将此窗格缩放到全屏,再次使用同一命令进行还原。这样就无需在上述配置的末尾定义CB +和CB-键序列。
dr-jan 2015年

9
如果您使用的是tmux 2.1或更高版本,则所有与鼠标相关的命令都已过时,而由“ mouse”代替,它可以设置所有内容。因此,要默认禁用鼠标模式,请使用“ setw -g mouse off”。删除对“ mode-mouse”,“ mouse-resize-pane”,“ mouse-select-pane”或“ mouse-select-window”的任何引用。
2016年

50
但是,启用鼠标模式有其好处:它允许我滚动。是否有一些设置组合可以让我像普通的织补终端一样使用我的终端?包括复制/粘贴和滚动吗?
Mihai Danila

1
是否有我可能搞砸用,因为一些其他的设置OSx (Sierra)option并没有帮助。转动mode-mouse off使我可以像平常一样进行选择,但是之后我无法复制到剪贴板中(cmd+C或者cmd+shift+C什么也不做,或者敲响错误提示,或者调出颜色选择器)
像平常一样 dwanderson

3
使用tmux v3进行了测试,可以通过一个绑定将其打开和关闭:bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'
Evgeny

248
  1. 复制文本:选择文本,然后按鼠标left-buttonshift按键了。
  2. 使用shift键+ 粘贴文本middle-button

30
对于OSX用户,这是选项键,如本博客文章所述:awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse
pangratz 2014年

3
实际上,在使用Shift + LMB选择文本之后,您可以使用OS功能(在我的情况下为Ctrl-Shift-C)复制到非X11剪贴板。
尤金·潘科夫

8
OP明确指出他们希望能够使用鼠标复制和粘贴而不使用键盘。按下Shift(或OSX上的选项键)是本书中最古老的技巧,可以在大多数模拟器上使用,但不能回答原始问题。
Lqueryvg

1
@pangratz使用选项键可能对iTerm用户有效,但不适用于本机Terminal的用户。
anishpatel

感谢您的解决方法!但是,它仍然不是最佳选择–鼠标滚轮=滚动历史记录,所有其他鼠标功能=正常会更好。
Torsten Bronger

36

如果“将-g模式-鼠标设置为开”,则可以执行以下操作:

在Mac上,按“ fn”按钮,然后选择文本并用鼠标右键单击或键盘cmd + c复制。


4
对我来说,这似乎只有在我不使用鼠标滚动时才起作用。一旦我用鼠标滚动
Paul

您也可以粘贴fn+Middle-Click
spinup

10

这里修改-我使用xclip而不是xsel原始版本:

bind -T root MouseDown2Pane run -b "xclip -o | tmux load-buffer - && tmux paste-buffer -s ' '"

这对我来说很愉快 tmux 2.5-rc2


这在终端上很好用,但是当我尝试粘贴到vim时它表现得很奇怪
Tropilio '19

9

使用<prefix>+m打开或关闭鼠标模式

bind m run "if [[ `tmux show-option -w | grep mode-mouse.*on` ]]; then toggle=off; else toggle=on; fi; tmux display-message \"mouse tmux: \$toggle\"; tmux set-option -w mode-mouse \$toggle &> /dev/null; for cmd in mouse-select-pane mouse-resize-pane mouse-select-window; do tmux set-option -g \$cmd \$toggle &> /dev/null; done;"

这对我来说很完美。非常感谢。我希望能够在鼠标模式下滚动,但这破坏了我复制文本的能力。如果要禁用鼠标模式,可以快速切换。
Bijan

6
我使用bind m set-option mouse\; display-message "Mouse is now #{?mouse,on,off}"
Maxim Suslov,

用户希望能够复制粘贴,而不是更多.tmux.conf自定义!
杰克·瓦西

6

我想让克里斯蒂安的榜样为Tmux 2工作时遇到问题,我认为有些错字。我完成了以下工作,阅读起来更容易一些,并且设置了全局和窗口模式。给某人。新用户和tmux很棒!

bind m run "\
    tmux show-options -g | grep -q "mouse\\s*on"; \
    if [ \$? = 0 ]; \
    then  \
        toggle=off;  \
    else  \
        toggle=on;  \
    fi;  \
    tmux display-message \"mouse is now: \$toggle\";  \
    tmux set-option -w mouse \$toggle; \
    tmux set-option -g mouse \$toggle; \
    "

1
为我工作。针对来自github的tmux HEAD进行了测试(截至昨天)。
Lqueryvg

2
为了完成这项工作,我必须将show-options行更改为tmux show-options -g | grep -q "mouse\\s*on"; \ 。这是因为正则表达式mouse.*on匹配@scroll-in-moused-over-pane "on",它是插件nhdaly / tmux-better-mouse-mode的一部分
Mandy Schoep

1
做基本相同操作的简单绑定bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'
Evgeny

6

对于Mac + iTerm2 + tmux(版本> 2.1)的用户

确保在tmux配置中设置了鼠标模式(只需set -g mode-mouse on在〜/ .tmux.conf中添加)。现在,要在窗格内复制文本:

  1. option + command并选择要使用鼠标光标复制的文本。这就像裁剪图片。
  2. 所选文本将自动复制(无需复制command + c)。只需按常规方法粘贴即可。

5

Yves Blusseau帮助我弄清楚了它是如何工作的,但是在我的机器上(运行Windows 10),行为有些不同。

tmux 2.6

使用激活的鼠标(:set -g mouse on

复制

  1. 按住Shift并用鼠标选择要复制的文本
  2. 现在,右键单击以复制所选文本(不保留Shift

  1. 按住Shift并右键单击以插入复制的文本

就那么简单。请享用!


最好的。简洁大方。
虚弱

3

这是Kaixuan 答案的修改版本,与Tmux 2.1兼容。

`bind m run "if [[ `tmux show-options -w | grep mouse.*on` ]]; then toggle=off; else toggle=on; fi; tmux display-message \"mouse tmux: \$toggle\"; tmux set-option -w mouse \$toggle &> /dev/null;`"

所有mode-mouse选项已合并为一个mouse选项,show-option必须替换为show-options


1
这应该是在tmux.conf上吗???
阿诺德·罗阿

1
这要去哪里?
statquant

@ArnoldRoa @statquant:是的,这已记录在案~/.tmux.conf。它绑定了<prefix>+m运行该内联脚本的关键。
inblueswithu

0

~/.tmux.conf

set -g mouse off

bind r source-file ~/.tmux.conf可能是太有用,所以你可以做ctrl-d r重新载入实例的配置。


0

根据此处发布的其他答案,我创建了一个简洁的解决方案,可以(至少)使用 tmux 2.8tmux 3.1

您可以tmux mouse support通过按prefix- 来打开和关闭M。在.tmux.conf文件中,包括以下行:

bind-key -T prefix m run "m=$(tmux show -g mou|grep -q on;echo $?);tmux set -g mou $m;tmux display mouse:\$m"

mouse: 1启用和mouse: 0禁用时都会显示。反复按prefix- M将在之间切换鼠标模式。

另请参阅:tmux鼠标支持

编辑:如果您看到命令returned 1错误消息,那么您将需要对tmux 3.1tmux 3.2使用以下命令:

bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'

(该解决方案之前已提到)


-1

我使用以下绑定来选择文本,同时按下鼠标左键-

bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "/mnt/c/Windows/System32/clip.exe"
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.