在tmux中,鼠标滚动无法像我在没有tmux的情况下运行shell时(在Gnome Terminal中)那样工作。看来tmux发送鼠标滚动事件就像我按上/下键一样。但是我想让它滚动显示shell输出历史记录。有没有办法使tmux像这样工作?

注意:我知道如何用键盘滚动(由于这里有另一个问题)。

我尝试了鼠标滚动tmux的两个版本:


0.8-5hardy1(在Ubuntu 8.04(Hardy Heron)上)
1.3-1(在Ubuntu 10.10(Maverick Meerkat)上)


评论

我认为bukzor的答案解决了tmux 1.5及更高版本的问题。

在tmux 2.1及更高版本上,将set -g鼠标添加到〜/ .tmux.conf,并开始新的tmux / tmate会话。要复制文本,请在按住Shift键的同时用鼠标选择。

#1 楼

在输出的历史记录中滚动您可以使用^b + [
,然后可以使用M + V向上翻页,使用^ V向下翻页。我不知道您是否可以使用真正的PgUp和PgDown。我的终端没有将这些密钥发送到tmux。而是自动滚动而不是tmux历史记录。

要退出复制模式,请按ESC

要在此模式下使用鼠标(称为复制模式),请按^b + :
,然后输入以下内容:

setw -g mouse on


注意:在tmux <2.1中,该选项名为mode-mouse,而不是mouse

现在当您更改为复制模式时,可以使用鼠标滚动浏览。
如果需要,可以将此命令放在〜/ .tmux.conf中,以便每次运行tmux时都将其加载。

更新:从tmux 1.5开始,此选项使使用滚轮自动切换到复制模式并向后滚动tmux回滚缓冲区。不再需要先点击Ctrl-B + [。向下滚动到提示也会自动结束复制模式。

评论


请注意,如果您已经具有正在运行的tmux服务器,则可能必须重新加载配置文件。 blog.sanctum.geek.nz/reloading-tmux-config tmux源文件〜/ .tmux.conf

–艾伦·尼恩惠斯(Allan Nienhuis)
2013年12月1日17:31

在OS X上不为我工作。

– Ain
2015年3月10日13:27

@Ain-现在有11个主要的OS X版本。我们到底在谈论哪个版本?

–猎犬
15年7月8日在12:24



对于tmux> = 2.1,请参见@DannyRe的答案(当前距离很远)。

– joelostblom
15年12月31日在18:07

设置-g鼠标在macOS tmux 2.1上为我工作

–米格尔·莫塔(Miguel Mota)
17年1月5日,17:58



#2 楼

Tmux 2.1进行了一些更改



鼠标模式已被重写。现在不再有以下选项:


鼠标调整窗格
鼠标选择窗格
鼠标选择窗口
模式鼠标

仅有一种选择:'mouse'会完全打开鼠标支持。



那将是

set -g mouse on
# to enable mouse scroll, see https://github.com/tmux/tmux/issues/145#issuecomment-150736967
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"


评论


谢谢,现在选择窗格等工作,但是滚动不起作用。为了使滚动再次起作用,请使用以下命令:github.com/NHDaly/tmux-scroll-copy-mode

–马赫迪
2015年10月20日在20:15



很棒-甚至可以在cygwin上工作-WINDOWS 7上的tmux

–GWD
16年1月21日在15:52

@Mahdi这似乎不适用于osx。有什么提示吗?

–rdbisme
16年2月11日在8:39

在tmux 2.3上似乎不再需要绑定

– Theron Luhn
16 Dec 5'在18:49

为上的set -g鼠标+1。先前的评论是正确的。不再需要绑定。

– Dakusan
18年2月12日在19:19

#3 楼

当前版本的tmux(1.5)允许您简单地将mode-mouse选项设置为on,并允许您使用鼠标滚轮滚动。
         mode-mouse [on | off]
                 Mouse state in modes.  If on, the mouse may be used to
                 enter copy mode and copy a selection by dragging, to
                 enter copy mode and scroll with the mouse wheel, or to
                 select an option in choice mode.

在我的.tmux.conf中:
set-window-option -g mode-mouse on

更新-从tmux 2.1开始,此选项已重命名为mouse

评论


那就是你真正想要的行为!鼠标滚动启用复制模式,而不仅仅是滚动shell备用缓冲区。最终,这对我来说是从屏幕切换到tmux的动力。是否可以通过Shift + PgUp来获得相同的行为?

– kynan
2011-12-9 13:24



@kynan:我个人只是按C-A PgUp即可。您可以使用tmux bind-key -n PPage copy-mode -u直接绑定页面向上键。如果您从本地终端取消绑定,则类似的样式应适用于shift + pageup。

–布克佐尔
2012年12月12日在20:04

这导致了一种奇怪的行为,当我滚动回命令行时,我在CLI中插入了一个额外的字符,这通常导致我的第一个命令格式错误。真烦人。

–克里斯·R
2012年12月27日在17:01

请注意,但是,这对于用鼠标触发滚动效果很好,在选择要单击鼠标中键粘贴的文本时会导致奇怪的行为。由于折衷是不可接受的,所以我最终选择了C-b pg上/下(默认)。

– h7r
15年5月14日在19:18

@ChrisR我也很明白这一点,而且不太一致。它是[M [M#[M [M#[M [M#[M [M#[M]类型的字符串?

–伊利亚·林恩(Elijah Lynn)
16年1月8日,0:34

#4 楼

更新:
像其他人提到的那样,在较新的tmux版本中,只需将以下内容放入.tmux.conf中。
setw -g mouse on

以前对较旧tmux版本的建议:
在您的.tmux.conf中
# Make mouse useful in copy mode
setw -g mode-mouse on

# Allow mouse to select which pane to use
set -g mouse-select-pane on

# Allow xterm titles in terminal window, terminal scrolling with scrollbar, and setting overrides of C-Up, C-Down, C-Left, C-Right
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"

# Scroll History
set -g history-limit 30000

# Set ability to capture on start and restore on exit window data when running an application
setw -g alternate-screen on

# Lower escape timing from 500ms to 50ms for quicker response to scroll-buffer access.
set -s escape-time 50

来自http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY

评论


+1设置逃生时间

– Dakusan
18-2-12在19:22



对于其他任何人,.tmux.conf文件都位于您的主目录中。

–user2647513
19年9月3日,14:56

只需设置-g鼠标即可替换鼠标设置

– Shital Shah
19/12/11在10:25

直到2020年5月,这对我在Ubuntu 18.04LTS上的工作都非常有效,然后开始向我发出警告和各种不起作用的东西。我猜有些东西会自我升级?如果我删除鼠标选项,将其替换为set -g mouse on(q.v. stackoverflow.com/a/33336609/303056),并删除Terminal-overrides似乎更好

–豹
20 May 26 '17:25



#5 楼

某人(从我迷失的来源中)建议将以下内容添加到~.tmux.conf中:在tmux会话中用鼠标滚轮滚动,而无需进入tmux的复制模式;我只是滚轮和BAM!有用。请注意,我正在使用terminal.app,但我记得OP给出了专门用于gnome-terminal的答案。

评论


杰德,谢谢你!您的建议也适用于gnome-terminal。我将尝试使用此设置一段时间。但这有一个缺点:鼠标滚动现在无法正常运行。如果我在tmux中加载的内容较少,则鼠标滚动不会滚动以更少的方式打开的文件。滚动整个终端。奇怪的是,在您的设置中,vim在tmux内部的行为与预期的一样。

–user31494
2011年7月14日在18:08



请注意,从tmux 1.5开始,此选项已由setw -g mode-mouse on选项取代,该选项使用鼠标滚轮进行复制模式回滚。

– kynan
2011-12-09 13:30

解释是,此选项禁用了终端的备用屏幕上的滚动锁定,这在大多数情况下是理想的,因为请求备用屏幕缓冲区(vi,less,tmux等)的应用程序提供了自己的滚动功能。覆盖tmux中的此锁定允许滚动终端的备用屏幕缓冲区,这在少数情况下不会产生期望的结果。请参阅此答案以获取来自man xterm的解释替代屏幕的引用。

– kynan
2011-12-9 14:26



las,这在iTerm中不起作用

– Suan
2012年1月18日,0:11

我在iTerm 2中获得了积极的结果

–基思笑脸
13年5月17日下午4:14

#6 楼

如果您已经处于tmux会话中,则可以运行命令

set mouse on


提醒:要运行命令,请使用前缀,然后输入:

评论


谢谢为我工作:)

–索赫尔·艾哈迈德(Sohel Ahmed)
19-10-20在14:32

#7 楼

tmux 2.1引入了新的鼠标绑定。

我今天才写了这些绑定。当不在Vim中时,它可以无缝地将鼠标滚轮绑定到箭头,因为Vim能够解释原始的鼠标滚轮代码(例如,根据鼠标悬停在哪个Vim窗口上,为您选择要滚动的Vim窗口)。

这意味着我们最终只能使用鼠标来查看多个手册页,以及接受箭头键的任何其他内容。您可以根据需要扩展和链接if逻辑,以为您的应用程序实现更多逻辑。

bind -n WheelUpPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Up"
bind -n WheelDownPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Down"


借助这种新的滚轮绑定功能,可以将鼠标滚轮编写为做任何您喜欢的上下文相关行为。

评论


我现在只是想让窗格边框上的鼠标滚轮做一些有趣的事情。可能我要做的不是在边界上映射轮,而是在状态线上完成时映射它以循环tmux窗口。

–陆even
2015年12月15日23:53

什么是您的Github链接?我想跟上您的努力!我正在寻找的另一个功能是双击单词,将其复制到X剪贴板,就像在Tmux之外一样。

– joeytwiddle
16-3-30的3:11

@joeytwiddle我强烈推荐github.com/NHDaly/tmux-better-mouse-mode,请参阅我的其他答案

–陆even
18年1月2日在23:54

#8 楼

Gnome终端在“常规”滚动受限的情况下做了一些巧妙的技巧,将鼠标滚动事件转换为向上和向下箭头键。例如,当您使用less查看某些文本时(尤其是在读书时),您可以使用jk和箭头键滚动内容。而且,借助gnome-terminal,由于提到了技巧,您也可以使用鼠标滚动来做到这一点。插入:鼠标滚动转换为按向上/向下箭头键。

您可以在配置文件设置中关闭此功能,并在任何情况下进行常规滚动。只需取消标记“滚动”选项卡中的最后一个复选框即可:

评论


谢谢您的解释,uldtko!但这并不能解决鼠标滚动问题。是的,关闭该选项后,gnome-terminal会停止发送三重^ [[A和^ [[B在鼠标滚动时。它在tmux中更好(在某些程序中没有丑陋的^ [[A ^ [[A ^ [[A在某些程序中,没有丑陋的命令历史记录滚动),但是现在停止滚动鼠标滚动时更少了。

–user31494
2010-12-27 14:48



乌克兰? (通过i字符猜测)

– dotancohen
13年4月18日在11:17

#9 楼

https://github.com/NHDaly/tmux-better-mouse-mode

针对新型tmux的鼠标控制的可配置且功能丰富的实现。强烈建议。

您可能还想使用

set -g @emulate-scroll-for-no-mouse-alternate-buffer "on"


也要使用它。

评论


我安装了它,但是不再能够用鼠标突出显示和复制文本。你能做到吗?

– jonathanking
19年1月11日在18:03

是的,您可能存在与之相关的其他鼠标相关tmux配置。

–陆even
19年1月11日在22:02

#10 楼

您可以结合其他答案中的绑定思想来获得令人满意的滚动行为:
在vim中工作
在终端中自动更改为复制模式,并在到达底部时退出它
仍然允许您可以在人,人和事等方面使用鼠标滚轮。

我的代码:

bind -n WheelUpPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Up Up Up Up"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"
bind -n WheelDownPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Down Down Down Down"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"


您可以添加其他需要箭头键的命令在grep -e'man'部分中滚动

我多次添加了发送键,因此鼠标滚轮上的一个刻度将一次滚动4行

#11 楼

没有其他答案对我自己完全有效。我必须使用set -g mouse on启用鼠标选项,然后使用Shift + Mouse Wheel滚动终端。