如何在 tmux 中滚动?

cha*_*doh 1675 tmux

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

Den*_*son 2011

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

或者,您可以按Ctrl-b PgUp直接进入复制模式并向上滚动一页(这听起来像是您大部分时间都想要的)

vi模式下(见下文),您还可以使用Shift-kShift- 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
Run Code Online (Sandbox Code Playgroud)

再加上一堆。请注意,C-b如果您将其用于向上翻页,则必须按两次,因为它C-b已绑定为命令键。有关以重复计数开头复制模式命令的信息,请参见手册页。

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

:set-window-option mode-keys emacs
Run Code Online (Sandbox Code Playgroud)

vi

  • @chadoh:在你的 Macbook 上试试这些:主页:fn-LeftArrow;结束: fn-右箭头;Page Up:fn-UpArrow;向下翻页:fn-DownArrow。制作键帽:`<kbd>Ctrl</kbd>` (49认同)
  • 我认为`Cb =` 默认是`choose-buffer`。你的意思是`Cb [`(默认是`copy-mode`)吗?此外,您还可以使用 `Cb PageUp` 直接在上一页上启动复制模式(当您知道要查看/复制的内容已经滚出当前页面时非常方便)。 (18认同)
  • 在 macbook 上,如果您处于滚动模式,则可以使用 fn+Shift+LeftArrow 向上滚动页面。 (16认同)
  • 在 macbook 上,fn+up 直接进入终端应用程序,从不点击 tmux (6认同)
  • 正确,我的 tmux 没有滚动模式。您需要`Cb [` 进入复制模式,然后使用emacs 或vi 键绑定来滚动。这似乎只是滚动的步骤很多,但 tmux 的好处仍然超过这些烦恼。我在 macbook 上,没有 PageUp 键:-\。(另外,丹尼斯,我如何像你一样用 Markdown 制作钥匙?) (4认同)
  • 要退出滚动模式,请按 Escape 或 Q。不要像我一样卡住:) (2认同)
  • 仅仅完成基本的事情就有这么多麻烦 - 为什么 UI 必须如此糟糕? (2认同)

小智 422

好吧,您应该考虑设置滚动的正确方法:添加 ~/.tmux.conf

set -g mouse on        #For tmux version 2.1 and up
Run Code Online (Sandbox Code Playgroud)

或者

set -g mode-mouse on   #For tmux versions < 2.1
Run Code Online (Sandbox Code Playgroud)

它在窗口和窗格中对我有用。现在 tmux 是完美的。

实用 tmux有更多关于 tmux.conf 文件的信息。

  • 重要说明:此设置会中断突出显示和复制文本。使用 shift+click 来维护此功能。 (37认同)
  • 未来的 tmux 鼠标用户:为了避免在键入之前再次滚动到底部,您可以点击 `q` 退出滚动模式。 (33认同)
  • 鼠标滚动可以正常工作,但不幸的是我不能再使用鼠标来选择文本。使用 Tilda 和 tmux。 (20认同)
  • 当我这样做时,鼠标点击和滚动会导致乱码字符打印到我与 tmux 一起使用的终端的提示区域。有任何想法吗? (7认同)
  • 1) 我们不能再使用点击选择文本 2) 我们不能滚动到 vim (3认同)
  • 这对我有用,但只有在使用 `tmux kill-server` 杀死 tmux 服务器之后。 (2认同)
  • @pltrdy @friederbluemle @Shadoninja:使用`mode-mouse on` 仍然可以在Mac 上使用**_Shift + 鼠标拖动_** 或**_Option + 鼠标拖动_** 来选择文本。 (2认同)

小智 167

从我的 .tmux.conf :

# Sane scrolling
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
Run Code Online (Sandbox Code Playgroud)

这将启用本地 xterm 滚动。

  • 你能解释一下这到底是做什么的吗? (34认同)
  • 解决方案:https://gist.github.com/1297707 (17认同)
  • 我不知道它有什么作用,但它是纯粹的天才。最后,tmux 滚动工作,耶! (14认同)
  • 这在 OS X 上对我不起作用...... (7认同)
  • 如果您对 togdon 的回答感到困惑,请查看:http://superuser.com/questions/310251/use-terminal-scrollbar-with-tmux?lq=1 IMO,如果您只有一个窗格,则此解决方案有效比接受的答案更好。 (7认同)
  • https://wiki.archlinux.org/index.php/Tmux#Scrolling_issues (3认同)
  • 很好,但是在使用 `less` 命令显示一些文件后它会中断(对我来说),即鼠标滚轮向上滚动将显示 N 个空行,其中 N=用 `less` 显示的文件长度。 (2认同)
  • 在(n)(重新)附加后它不会保留回滚缓冲区 (2认同)
  • 这不适用于多个窗格。它将滚动主主机终端而不是在 tmux 内部运行的模拟终端 (2认同)

Flo*_*lov 76

对于最新的 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'"
Run Code Online (Sandbox Code Playgroud)

仅仅重新加载您的 .tmux.conf 是不够的,您需要重新启动 tmux,例如,tmux kill-server && tmux或者只是退出使用 tmux 的服务。

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

  • 你能详细说明这是如何工作的吗? (3认同)
  • @chefarov - 根据对另一个答案的评论,当您打开鼠标模式时,您可以通过“Shift+单击”来执行此操作。 (3认同)
  • 这怎么不是公认的答案? (2认同)
  • 这个答案中关于“不足以简单地重新加载 .tmux.conf 帮助”并为我退出所有 tmux 会话(也许 kill-server 会起作用)的注释有所帮助! (2认同)

小智 19

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


Ema*_*erg 16

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

要尝试一下,请将所有代码部分放在~/.tmux.conf.

步骤 1. 更改前缀键,这样您就不必达到一点。'B' 似乎是一个关闭键,但它位于两个食指的中间(分别在 'F' 和 'J' 处)。因为该快捷方式在 tmux 中必不可少,所以 Cj 更好,因为它涉及零手部移动(除了击键)。

set -g prefix C-j
unbind C-b
bind C-j send-prefix
Run Code Online (Sandbox Code Playgroud)

Step 2. 'S'(进入copy-mode)是:1)close(同上),2)牵扯到另一只手(比较:boxing中的1-2,或者ls查看目录下文件的命令) ) 和 3) 可以被认为是“滚动”的助记符(尽管复制模式不仅仅是滚动)。

bind s copy-mode
Run Code Online (Sandbox Code Playgroud)

步骤 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
Run Code Online (Sandbox Code Playgroud)


pho*_*cks 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"
Run Code Online (Sandbox Code Playgroud)

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

更新:

我发现如果您将 Putty Connection > Data > Terminal-type 中的设置从“xterm”更改为“putty”(用于修复某些格式问题),则此解决方案将停止工作。

更新 2:

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

  • 这实际上也解决了我在 iPhone 应用程序中的滚动问题。 (2认同)

mun*_*eeb 10

我为此搜索了很多,最适合我的解决方案如本详细指南中所述: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
Run Code Online (Sandbox Code Playgroud)

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

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


小智 10

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

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


小智 9

这对我有用:

vim ~/.tmux.conf
set -g mode-mouse on      ###Insert this setting with vim, then source the file.
tmux source-file ~/.tmux.conf
Run Code Online (Sandbox Code Playgroud)

  • 自 2.1 版(2015 年 10 月 18 日)起,该选项应为`set -g mouse on` (4认同)
  • +1,因为这个解决方案无需重新启动 tmux 服务器即可工作(我正在运行重要的作业)。不过,我确实分离并重新连接到 tmux 会话。请记住将“set -g mode-mouse on”更改为“set -g mouse on”,如 @naoko 的评论中所述。 (2认同)

小智 6

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

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