返回旧的复制粘贴行为在 tmux,用鼠标

这是我过去在 tmux 中复制粘贴所做的事情(使用鼠标,键盘的工作方式不同,这不是我感兴趣的) :

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

我已经升级了我的操作系统,这已经得到了一个新的 tmux 版本。我没有更改我的 .tmux.conf配置文件。

这就是我对当前版本的 tmux1.6(它们是在最新的 CrunchBang Linux 中预先打包好的)所要做的:

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

对于我一天要做几十次的事情来说,这太麻烦了。如何让旧的机制重新工作?

121310 次浏览

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

prefix : set -g mouse off

其中 prefix是 tmux 访问键(默认情况下 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
  1. 复制文本: 选择文本并用 shift键按下鼠标 left-button
  2. shift键 + middle-button粘贴文本

使用 <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;"

这是 开轩的回答的一个修改版本,兼容 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

我有问题得到克里斯蒂安的例子为 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; \
"

如果“设置-g 模式-鼠标”,你可以做到这一点:

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

给你-I 修改使用 xclip而不是原来的 xsel:

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

这是我在 tmux 2.5-rc2愉快的工作

对于 < em > Mac + iTerm2 + tmux (version > 2.1) 的使用者:

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

  1. option + command键并选择要使用鼠标光标复制的文本。这就像裁剪图片一样。
  2. 选定的文本将自动复制(不需要 command + c)。只是粘贴它通常的方式。

~/.tmux.conf:

set -g mouse off

拥有 bind r source-file ~/.tmux.conf可能也很有用,因此您可以执行 ctrl-d r来重新加载配置,例如。

Tmux 2.6 +

鼠标需要被激活才能工作,这样做: Ctrl + B,然后键入 :set -g mouse on。(或者更好: 在 tmux.conf中设置此设置以保持一致性。)

视窗10

鼠标模式激活后,在 Windows 上需要按下 Shift,如下所述。

收到

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

边缘案例: 水平分割窗格

当使用水平分割的窗格时,选择部分不是那么容易,因为在多行上的选择也跨越多个窗格,选择您不想选择的文本部分。为了避免离开当前窗格的选择,还要在按 Shift的同时按 Ctrl(感谢@Franck)。

另一个变通方法是快速更改窗格的布局(例如,使用 Ctrl + B,然后使用 Space) ,然后再将其更改回来。

粘贴

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

就这么简单。 好好享受吧!

MacOS

鼠标模式激活后,在 macOS 上需要按 fn。像往常一样使用 CMD + C来复制选定内容。

基于这里张贴的其他答案,我已经创建了一个简明的解决方案,与 (至少) Tmux 2.8Tmux 3.1工作。

您可以通过按 prefix-M来切换 tmux mouse support的开关。在 .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}'

(前面提到过这个解决方案)

我使用下面的绑定来选择文本,鼠标左键按下-

bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "/mnt/c/Windows/System32/clip.exe"

下面是在 tmux v3.1上测试的鼠标切换的更新版本

由于代码是一行代码,为了简短起见,我只用 t 表示变量名,并用条件查找字母 n 来替换 if 语句。 这个条件允许我们去掉很多空格和分号,进一步缩短了这条线。

bind m run "[[ `tmux show -gv mou` = *n* ]]&&t=off||t=on;tmux set -g mou \$t;tmux display-message \"mouse mode: \$t\""

下面是扩展成更易读形式的代码片段

[[ `tmux show -gv mouse` = *n* ]] && t=off || t=on
tmux set -g mouse $t
tmux display-message "mouse mode: $t"