如何滚动tmux?


1292

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


8
您关心什么开销?copy-mode是查看历史记录的方式(也可以选择复制其中的内容)。
克里斯·约翰森

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

7
set -g mode-mouse on每个@chaiyachaiya的回答对我来说都是赢家
Peter Berg

Answers:


1567

Ctrl- b然后,[您可以使用普通的导航键滚动(例如Up ArrowPgDn)。按q退出滚动模式。

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

vi模式下(请参阅下文),您还可以使用Shift- kShift- j(如果您已经处于滚动模式)逐行向上/向下滚动页面。光标不移动,而不移动页面。

手册页摘录:

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

 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


14
我认为C-b =choose-buffer默认。您是说C-b [copy-mode默认情况下)吗?您也可以C-b PageUp直接在上一页上启动复制模式(当您知道要查看/复制的内容已经从当前页面滚动下来时非常方便)。
克里斯·约翰森

4
正确,我的tmux没有滚动模式。您需要C-b [进入复制模式,然后使用emacs或vi键绑定进行滚动。这似乎只是滚动的许多步骤,但是tmux的好处仍然胜过这些烦恼。我在Macbook上,没有PageUp键:-\。(此外,丹尼斯,我该如何像
往常

44
@chadoh:在您的Macbook上尝试:Home:fn-LeftArrow; 结束:fn-RightArrow; 上一页:fn-UpArrow; Page Down:fn-DownArrow。进行关键操作:<kbd>Ctrl</kbd>
丹尼斯·威廉姆森

5
在Macbook上,fn + up直接进入终端应用程序,再也不会碰到tmux
Tyler

15
在Macbook上,如果您处于滚动模式,则可以使用fn + Shift + LeftArrow向上滚动页面。
尼克·哈蒙德

306

好吧,您应该考虑设置滚动的正确方法:在 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文件的更多信息。


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

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

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

27
请注意,在tmux 2.1及更高版本中,它被替换为set -g mouse on,并且滚动不会像以前那样自动进入复制模式。
thrnio

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

141

从我的.tmux.conf中:

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

这将启用本机xterm滚动。


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

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

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

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

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

57

对于最新的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


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

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

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

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

2
@chefarov-在对另一个答案的评论中,您可以通过Shift+click在打开鼠标模式时进行此操作。
布兰丹·摩尔

14

就我而言,在OSX上只需opt+ UpArrowopt+ DownArrow


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

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

11

这是我使其工作的方式,也是我认为它比默认方式更好的原因。

要进行尝试,请将所有代码部分放在中~/.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


7

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

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


1
谢谢,这对我来说是最好的解决方案。它涵盖了我手动添加的所有鼠标滚轮绑定(因此我不再需要它们),并且我非常想要两个杀手级功能:scroll-without-changing-panescroll-without-changing-pane和结合使用emulate-scroll-for-no-mouse-alternate-buffer。现在,我的tmux使用经验非常好。
selurvedu

6

唯一对我有用的是将以下内容放入 ~/.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"


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

我尝试过的最新方法不再起作用,但这有效。奇怪。set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
2016年

4

这为我工作:

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

2
自2.1版(2015年10月18日)起,该选项应为set -g mouse on
naoko

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

1

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

  • up arrow 排队
  • down arrow 线下
  • fn + up arrow 向上翻页
  • fn + down arrow 向下翻页
  • q退出查看模式

0

对我唯一有用的是在###上使用vim〜/ .tmux.conf set -g mode-mouse在Vim中插入此设置,然后获取文件。tmux源文件〜/ .tmux.conf


您可以使用一些格式来使其更清晰吗?使用“编辑”按钮,然后查看编辑器中可用的选项以添加有用的格式。
music2myear

-2
  • Ctrl+ A-开始滚动
  • Ctrl+ C-停止滚动

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

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

2
我一直在寻找如何停止滚动这么长时间,感谢您指出!
PERR0_HUNTER
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.