【问题标题】:Configure tmux scroll speed配置 tmux 滚动速度
【发布时间】:2016-03-15 04:46:25
【问题描述】:

可以配置 tmux 滚动速度(使用鼠标滚轮或触摸板)吗?

Tmux 2.1 有点破坏滚动(取决于您的配置),迫使我更新我的配置。几周前我就这样做了。

但现在我认为 tmux 的滚动速度* 比以前慢。我想我读过你可以配置滚动速度,但我现在在任何地方都找不到任何提及。

* 使用鼠标滚轮滚动。 (我实际上使用的是 Macbook 触控板,但我认为它相当于鼠标滚轮。)

我知道你可以使用 10C-u(使用 vi 键绑定)来跳转 10 页,但我也希望能够用鼠标快速滚动。

我认为这是我个人目前拥有的所有相关配置:

# Use the mouse to select panes, select windows (click window tabs), resize
# panes, and scroll in copy mode.
# Requires tmux version >= 2.1 (older versions have different option names for mouse)
set -g mouse on

# No need to enter copy-mode to start scrolling.
# From github.com/tmux/tmux/issues/145
# Requires tmux version >= 2.1 (older versions have different solutions)
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"

【问题讨论】:

  • 越来越多我认为 tmux 中的滚动速度在 2.1 中没有改变。我认为我将它与没有 tmux 的普通 iTerm 混淆了,其中滚动的速度取决于您在触控板上滑动的速度。可能不是可以通过配置在 tmux 中修复的东西。我敢打赌,这需要一个 tmux 功能请求。
  • 它确实有速度,只是不如没有 tmux 的流畅和快速,即使配置文件几乎是空的。 (我认为如果你在配置中放置足够多的钩子,它会减慢速度,但这似乎不是我的问题。)

标签: tmux


【解决方案1】:

使用tmux-scroll-copy-mode 插件应该会有所帮助。

安装后,只需将 set -g @scroll-speed-num-lines-per-scroll 5 添加到您的 .tmux.conf 中即可。

scroll-speed-num-lines-per-scroll - 设置每个鼠标滚轮滚动事件滚动的行数。默认选项是 3,这是 tmux 2.0 中的滚动速度。较大的数字滚动得更快。要将滚动速度减慢到每轮单击一行的速度,请将值设置为 0.0 和 1.0 之间的小数。使用十进制值,只有那部分车轮事件会生效。该值应 >= 0。示例:

"3" (默认) - 每点击一次鼠标滚轮滚动三行。 “1” - 每次鼠标滚轮滚动单击一行(最平滑)。 “0.5” - 仅在每隔一个鼠标滚轮滚动单击时滚动一行。 "0.25" - 每四次鼠标滚轮滚动点击一次滚动一行。

【讨论】:

  • 在 tmux 2.7 中将 @scroll-speed-num-lines-per-scroll 设置为 1(最平滑)
【解决方案2】:

从 tmux 2.6 开始,我无法在此处获得任何答案(最后在 3.2 上测试),最终想通了,所以发布了另一个答案。

这是一个独立的配置文件。

set -g mouse on

set-option -g status-keys vi
set-window-option -g mode-keys vi

bind-key -T copy-mode-vi WheelUpPane send-keys -X halfpage-up
bind-key -T copy-mode-vi WheelDownPane send-keys -X halfpage-down

【讨论】:

  • 在 2.9 中效果很好!如果您只想滚动 1 行,只需将 halfpage-up/down 替换为 scroll-up/down
  • 这应该是公认的答案,就像一个魅力。
【解决方案3】:

对于 tmux 2.4 及更高版本,以下适用于我:

bind -Tcopy-mode WheelUpPane send -N1 -X scroll-up
bind -Tcopy-mode WheelDownPane send -N1 -X scroll-down

这会将其设置为一次滚动 1 行。

来自changelog - 寻找Changes from 2.3 to 2.4

【讨论】:

  • 确认这一点在 tmux 2.6 中仍然有效(特别是对于 Android 上的触摸滚动,tmux 在 termux 中)。
  • 尝试在 tmux 2.7 上将 -N1 更改为 -N10,但它仍然一次只能滚动 1 行,这对于每个用例来说都非常慢。
  • 我必须使用 -Tcopy-mode-vi 才能工作,因为我在复制模式下使用 vi 绑定(在 tmux 3.1b 中工作)
【解决方案4】:

我同意,只有一行的滚动速度太慢了。你可以让它跳半页:

bind -t emacs-copy WheelUpPane   halfpage-up
bind -t emacs-copy WheelDownPane halfpage-down

这里提出的半页修复仍然太快了,并且通过将其替换为仅跳跃的感觉来破坏滚动的印象。要使滚动以自定义速度进行,您可以添加几个发送键命令,如下所示:

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

【讨论】:

  • 每当为答案工作时,请提及您的解决方案适用的 tmux 版本。或文档链接。
  • 我使用了 tmux 2.1 版。文档可在线获取。
【解决方案5】:

这是一个相当糟糕的解决方案(使用 vim 导航模式,注意 kj)。

bind-key -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if-shell -Ft= '#{pane_in_mode}' 'send-keys 5 k' 'copy-mode -e'"

bind-key -n WheelDownPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if-shell -Ft= '#{pane_in_mode}' 'send-keys 5 j'"

目前还不确定所有的权衡是什么,但对于初学者来说这很糟糕,因为 1,光标移动到所有地方,2,当你切换方向时会有延迟,从向上滚动到向下滚动,反之亦然,而光标移动到窗格的另一边。

它确实具有可配置速度的优势。只需更改5 即可调整速度。

完全披露:我认为这一定是受到我在其他地方读到的一些东西的极大启发,因为它现在不是很熟悉。我希望我能记下我的消息来源。

【讨论】:

  • 不!那是个好主意 :) 只需将 k 替换为 C-yj 替换为 C-e 内置 vim 滚动。不需要插件。谢谢。
  • 几乎完美!稍作修改以使滚动事件转到鼠标所在的窗格,即使它不是活动窗格:bind-key -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if-shell -F -t = '#{pane_in_mode}' 'send-keys -t = H 5 k' 'copy-mode -e'" bind-key -n WheelDownPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if-shell -F -t = '#{pane_in_mode}' 'send-keys -t = L 5 j'" 也做了这样的修改,以便在滚动时光标跳到顶部/底部以解决滞后问题。
【解决方案6】:

tmux 有一个 mod,允许为“模式”键绑定指定任意数量的命令:http://ershov.github.io/tmux/

您可以向上或向下滚动几次,或者循环执行,甚至创建要执行的过程。

例如:

bind -t emacs-copy WheelUpPane tcl { scroll-up ; scroll-up }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多