我刚开始使用tmux,我真的很喜欢它,但是我需要能够在打开的缓冲区/窗格/窗口中滚动。我不在乎它是否适用于鼠标。当我搜索tmux手册页时,我什至只显示了两个单词“ scroll”,甚至都出现了,并且都与复制模式有关。有没有一种滚动方式,而无需进入复制模式的所有开销?

评论

您关心什么开销?复制模式是查看历史记录的方式(也可以选择复制其中的内容)。

对我来说,您可以按f7键进入滚动模式,按q键退出

在@chaiyachaiya的答案上设置-g模式-鼠标对我来说是赢家

只需运行:echo“ set -g mouse on” >>〜/ .tmux.conf,您就可以滚动。

#1 楼

Ctrl-b然后[然后您可以使用普通的导航键来滚动(例如,向上箭头或PgDn)。按q退出滚动模式。

或者,您也可以按Ctrl-b PgUp键直接进入复印模式并向上滚动一页(这听起来像您大多数时候都想要的那样)

vi模式下(请参见下文),您还可以使用Shift-k和Shift-j逐行滚动页面(如果您已经处于滚动模式)。

手册页中的摘录:


可以使用以下组合键从附加的客户端控制tmux:前缀键,默认情况下为'C-b'(Ctrl-b),后跟命令键。


 The default command key bindings are:

[           Enter copy mode to copy text or view the history.

Function                     vi              emacs
--------                     --              -----
Half page down               C-d             M-Down
Half page up                 C-u             M-Up
Next page                    C-f             Page down
Previous page                C-b             Page up
Scroll down                  C-Down or C-e   C-Down
Scroll up                    C-Up or C-y     C-Up
Search again                 n               n
Search again in reverse      N               N
Search backward              ?               C-r
Search forward               /               C-s


再加上一堆。请注意,如果将C-b用作命令键,则必须按两次C-b才能向上翻页。有关在复制模式命令前加上重复计数的信息,请参见手册页。

可以使用Ctrl-b设置键绑定模式,然后使用


:set-window-option mode-keys emacs


vi

评论


我认为C-b =默认为选择缓冲区。您是说C-b [(默认为复制模式)吗?另外,您也可以使用C-b PageUp直接在上一页上启动复制模式(当您知道要查看/复制的内容已经滚动到当前页面时非常方便)。

–克里斯·约翰森(Chris Johnsen)
2010年11月11日5:55



正确,我的tmux没有滚动模式。您需要C-b [进入复制模式,然后使用emacs或vi键绑定进行滚动。滚动似乎要采取很多步骤,但是tmux的好处仍然胜过这些烦恼。我在Macbook上,没有PageUp键:-\。 (而且,丹尼斯,我该如何像降价一样制作带有减价的键?)

–chad​​oh
2010年11月11日17:11



@chadoh:在您的Macbook上尝试:Home:fn-LeftArrow;结束:fn-RightArrow;上一页:fn-UpArrow; Page Down:fn-DownArrow。制作键帽: Ctrl

–丹尼斯·威廉姆森
2010年11月11日,18:43



在Macbook上,fn + up会直接进入终端应用程序,永远不会碰到tmux

–泰勒
2011年4月11日17:57

在Macbook上,如果您处于滚动模式,则可以使用fn + Shift + LeftArrow向上滚动页面。

–尼克·哈蒙德(Nick Hammond)
13年5月18日在17:51

#2 楼

好吧,您应该考虑设置滚动的正确方法:
在您的~/.tmux.conf中添加
set -g mouse on        #For tmux version 2.1 and up


set -g mode-mouse on   #For tmux versions < 2.1

它对我在窗口和窗格中都有效。现在,tmux非常完美。
实用的tmux包含有关tmux.conf文件的更多信息。

评论


当我这样做时,鼠标单击和滚动会导致乱码被打印到我正在使用tmux的终端的提示区域。有任何想法吗?

– ely
13年8月1日在15:38

将来的tmux鼠标用户:为了避免在键入之前再次滚动到底部,您可以按q退出滚动模式。

–詹·托马斯(Jezen Thomas)
2014年1月7日在5:11



鼠标滚动与此可以很好地工作,但不幸的是,我不能再使用鼠标来选择文本了。使用Tilda和tmux。

–friederbluemle
15年3月17日在3:40

重要说明:此设置中断突出显示和复制文本。使用Shift +单击以维护此功能。

– Shadoninja
16年5月4日在22:50



1)我们不能再通过点击来选择文本2)我们无法滚动到vim

– pltrdy
17年11月27日在15:54

#3 楼

来自我的.tmux.conf文件:

# Sane scrolling
set -g terminal-overrides 'xterm*:smcup@:rmcup@'


这将启用本机xterm滚动。

评论


您能解释一下这到底是什么吗?

–伊沃
2011年10月31日下午6:25

我不知道它是做什么的,但这纯属天才。最后,tmux滚动有效,是的!

–自己
2011-11-28 21:26

这在OS X上对我不起作用...

–尼克
2012年4月17日下午13:56

解决方案:gist.github.com/1297707

–尼克
2012年4月17日15:25

如果您对togdon的答案感到困惑,请查看此内容:superuser.com/questions/310251/…IMO,如果您只有一个窗格,则此解决方案比公认的答案更好。

– thameera
13年4月16日在7:48



#4 楼

对于最新的tmux 2.1,明智地使用鼠标滚动,这是正确的答案:

set -g mouse on
" sane scrolling:
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e; send-keys -M'"


仅重载.tmux.conf就不够了重新启动tmux,例如tmux kill-server && tmux

取自https://github.com/tmux/tmux/issues/145

评论


这怎么不是被接受的答案?

–马塞尔
16年12月21日在20:28

这个答案中关于“不足以简单地重新加载.tmux.conf帮助”并为我退出所有tmux会话(也许kill-server可以工作)的说明有所帮助!

–科林D
17年1月25日在18:05



您能否详细说明这是如何工作的?

–寡核苷酸
17年7月19日在7:31

当单击/滚动/等鼠标时,似乎可以转发鼠标事件。如果窗格处于任何间接/缓冲状态(仅是复制模式?),并且鼠标按下按钮,滚动等。最后一部分介绍了通过首先切换到间接模式在直接模式下进行滚动。如果不是这些控件,则终端可能会将事件解释为历史记录滚动(如果有的话)。话虽如此,我不知道我是否能够同时使寻呼机和Vim正确滚动,并且我尝试了一些代码片段。

– John P
18年1月2日在14:13

@chefarov-在对另一个答案的评论中,您可以在鼠标模式打开时通过Shift +单击来执行此操作。

–布兰登·摩尔(Brendan Moore)
19 Mar 27 '19 at 13:23

#5 楼

就我而言,只需在OSX上选择opt + UpArrow和opt + DownArrow。

评论


@ fixer1234这个问题根本没有提到Linux。 tmux也可以在OS X上使用。

–slhck
15年4月17日在11:51

@slhck:谢谢。太眼花ble乱;散光开始了。我误读了tmux标签作为linux标签。

–fixer1234
2015年4月17日在16:07

#6 楼

这是我使其工作的方式,也是我认为它比默认方法更好的原因。
要尝试一下,请将所有代码节放在~/.tmux.conf中。

第1步。更改前缀键,这样您就不必再伸手了。 “ B”似乎是一个闭合键,但是它位于两个食指的中间(分别位于“ F”和“ J”处)。由于该快捷方式对于tmux是必不可少的,因此Cj更好,因为它涉及零手运动(除了敲键)。

set -g prefix C-j
unbind C-b
bind C-j send-prefix


步骤2。'S'(进入复制模式)是:1)关闭(与上述原因相同),2)涉及另一只手(比较:装箱中的1-2,或使用ls命令查看目录中的文件),以及3)可以被认为是“滚动”的助记符(尽管复制模式不只是滚动)。

bind s copy-mode


步骤3。最后一部分,实际的滚动。为此,Emacs用户熟悉“ P”和“ N”。它们紧密,直观(键盘上的“ P”上方是“ N”)和助记符(“上一个”和“下一个”)。如果您只是在Emacs中进行了一些滚动,然后转到tmux,则拥有这些快捷键是很有意义的。

但是,我发现'I'和'K'甚至更好-它们甚至比“ P”和“ N”更近,直观(出于相同的原因);至于助记符-滚动是很常见的事情,助记符并不重要,因为快捷键很快就会绕过您的大脑并进入肌肉记忆。

bind -t emacs-copy 'p' scroll-up
bind -t emacs-copy 'n' scroll-down
bind -t emacs-copy 'i' scroll-up
bind -t emacs-copy 'k' scroll-down


#7 楼

我为此进行了很多搜索,并且本详细指南中提到了对我来说最好的解决方案:
http://tangledhelix.com/blog/2012/07/16/tmux-and-mouse-mode/

将这些绑定添加到〜/ .tmux.conf中:

set -g mode-mouse on

unbind +
bind + \
  new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \;\
  swap-pane -s tmux-zoom.0 \;\
  select-window -t tmux-zoom

unbind -
bind - \
  last-window \;\
  swap-pane -s tmux-zoom.0 \;\
  kill-window -t tmux-zoom


通过实现上述方法,您可以从窗口的窗格中复制首先使用Prefix +放大每个窗格即可。

鼠标模式缺少的一个重要细节是在选择要复制的区域之前按Shift。这会将其复制到传统的终端缓冲区,而不是tmux复制缓冲区。 (https://wiki.archlinux.org/index.php/Tmux#Scrolling_issues)

#8 楼

我建议尝试使用tmux-better-mouse-mode插件来解决大多数与tmux鼠标有关的问题。

它与Tmux 2.1+和新的set-option -g mouse on方法兼容。

评论


谢谢,这对我来说是最好的解决方案。它涵盖了我手动添加的所有鼠标滚轮绑定(因此我不再需要它们了),并且我非常想要两个杀手功能:scroll-with-with-changing-pane与scroll-without的组合更改窗格并模拟滚动鼠标无备用缓冲区。现在我的tmux使用经验是更好的方法。

–selurvedu
18年6月5日在11:02



#9 楼

这对我有用:

vim ~/.tmux.conf
set -g mode-mouse on      ###Insert this setting with vim, then source the file.
tmux source-file ~/.tmux.conf


评论


从2.1版(2015年10月18日)开始,该选项应设置为-g mouse on

– naoko
18/12/27在0:07

+1用于实际提供配置文件的完整路径。否则,@ chaiyachaiya的答案将是完美的。

–约翰·麦克法兰
19年8月24日在8:06

#10 楼

唯一适合我的方法是将以下内容放入~/.tmux.conf

# 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"


(您可能需要重新启动才能生效)

更新:

我发现,如果您将“腻子连接”>“数据”>“终端类型”中的设置从“ xterm”更改为“ putty”(用于解决某些格式问题),则此解决方案将停止工作。

更新2:

如果希望将“ putty”作为终端类型,请使用此选项:set -g terminal-overrides "putty*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"

评论


这实际上也解决了我在iPhone应用程序中的滚动问题。

– NathaneilCapital
16年6月17日在17:20

我尝试过的最新方法不再起作用,但这有效。奇怪。设置-ga终端重写',xterm *:smcup @:rmcup @'

–啄
16年7月5日在5:30

#11 楼

FWIW,在Macbook / OSX Mojave上,在ctrl+[执行以下操作后:



up arrow用于排列

down arrow用于排列向下

fn + up arrow用于向上翻页

fn + down arrow用于向下翻页
q退出查看模式


#12 楼



Ctrl + A-开始滚动

Ctrl + C-停止滚动


评论


这篇文章太短,无法有效回答问题。它为已经发布的答案添加了很少的新信息。它没有说明如何滚动(仅介绍了如何在复制模式下更改)。另外,默认的命令前缀键组合为Ctrl-B(Ctrl-A是GNU屏幕的默认键)。

– Anthony Geoghegan
16-10-26在8:50



不知道这个答案的作者是否理解这个问题。这是无益的,而且是错误的。

– Vik
17 Mar 30 '17 at 7:53

我一直在寻找如何停止滚动这么长时间,感谢您指出!

–PERR0_HUNTER
17年4月9日在17:12