在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)上)
在tmux中,鼠标滚动无法像在没有tmux的情况下运行shell时(在Gnome Terminal中)那样工作。看来tmux发送鼠标滚动事件就像我按上/下键一样。但是我想让它滚动显示shell 输出历史记录。有没有办法使tmux像这样工作?
注意:我知道如何使用键盘滚动(由于这里还有另一个问题)。
我尝试在两个版本的tmux中滚动鼠标:
Answers:
在输出的历史记录中滚动您将使用^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+ [。向下滚动到提示也会自动结束复制模式。
set -g mouse on在macOS tmux 2.1上为我工作
                    Tmux 2.1有一些更改
鼠标模式已被重写。现在不再有以下选项:
相反,只有一个选项:“鼠标”完全打开了鼠标支持。
那会是
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'"
bind在tmux 2.3上似乎不再需要了
                    set -g mouse on。先前的评论是正确的。不再需要绑定。
                    当前版本的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
C-A PgUp这样做。您可以直接使用绑定上一页键tmux bind-key -n PPage copy-mode -u。如果您从本地终端解除绑定,则类似的样式应适用于shift + pageup。
                    在您的.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
escape-time设置
                    有人(从我失去的消息来源)建议将以下内容添加到~.tmux.conf:
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
我不知道它是如何工作或如何工作的,但是现在这使我可以在tmux会话中使用鼠标滚轮滚动而不必进入tmux的复制模式。我只是滚轮和BAM!有用。请注意,我正在使用terminal.app,但是我记得OP专门针对给出了答案gnome-terminal。
less。如果我less在里面加载tmux,鼠标滚动不会滚动打开的文件less。滚动整个终端。奇怪的是,vim在tmux您的设置中,其行为符合预期。
                    setw -g mode-mouse on选项已被该选项取代,该选项使用鼠标滚轮进行复制模式回滚。
                    man xterm。
                    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"
借助这种新的滚轮绑定功能,可以编写鼠标滚轮脚本以执行您喜欢的任何上下文相关的行为。
侏儒终端做了一些巧妙的技巧,在受限的“常规”滚动条件下将鼠标滚动事件转换为向上和向下箭头键。例如,当您查看使用一些文本less(这种情况尤其是当你正在阅读一个人),你可以滚动使用的内容j,k和箭头键。但也与gnome-terminal,你可以做到这一点鼠标滚动,感谢提到伎俩。
因此,我想tmux对终端进行一些“捕获”,就像less- gnome-terminal踢进去的机制一样:鼠标滚动转换为向上/向下箭头键的按下。
您可以在配置文件设置中关闭此功能,并在任何情况下进行常规滚动。只需取消标记“滚动”标签中的最后一个复选框: 。
。
gnome-terminal停止发送三次滚动^[[A并按^[[B鼠标滚动。更好tmux(^[[A^[[A^[[A在某些程序中不难看,在命令历史记录中也不丑陋),但是现在less停止了鼠标滚动。
                    i角色猜测)
                    https://github.com/NHDaly/tmux-better-mouse-mode
针对新型tmuxes的鼠标控制的可配置且功能丰富的实现。强烈推荐。
您可能想使用
set -g @emulate-scroll-for-no-mouse-alternate-buffer "on"
也。
您可以结合其他答案的绑定思想来获得令人满意的滚动行为:在vim中工作,可在终端上自动更改为复制模式,并在到达底部时退出,仍然允许您在man,less和journalctl中使用鼠标滚轮。
我的代码:
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行