iTerm2 - 使用鼠标滚轮滚动输出内容更加高效

46
我刚从OSX终端转换到iTerm2,但好像失去了一个功能。在终端中,我可以使用鼠标滚轮来浏览less命令的输出,因为我安装了MouseTerm。但是,在iTerm2中尝试滚动less输出时,窗口的滚动条会移动。奇怪的是,在vim中,滚动正常工作。如何在iTerm2中使用鼠标滚轮滚动less输出呢?

1
听起来你安装了某种第三方软件,因为终端不支持使用鼠标滚轮发送输入到tty,它只知道如何滚动滚动条。 - Chris Page
@ChrisPage 确实,你发现得很好。我忘记我很久以前安装了MouseTerm。我在问题中澄清了这一点。 - Ruben Verborgh
6个回答

82

现在它已经在iTerm2中实现,并且可以通过以下方式激活:

设置 -> 高级 -> 在备用屏幕模式下滚轮发送箭头键 并将其更改为

“在备用屏幕模式下滚轮发送箭头键”设置的图片

(defaults write com.googlecode.iterm2 AlternateMouseScroll -bool true 仍然有效,但它只会改变同样的设置)


11
SE最大的弱点之一是没有可靠的机制来推广更新的答案,除非有很多人投票或问题提出者回来更改被接受的答案。 - krs013
这在iterm2版本3.1.5上似乎无法工作,有什么线索吗? - Don Giulio
一开始可以工作,但现在不行了。使用的是v3.1.7版本。还有其他建议吗? - Jonauz
@Jonauz 请尝试更新或重新启动iTerm,对于我来说,在v3.2.0上它运行得非常好。 - Pylinux
5
在使用git diff时,3.2.6版本无法运行。有什么建议吗? - Johnny_D
显示剩余3条评论

53

iTerm2问题现在被标记为“已修复” - 但是修复的方法是添加一个隐藏选项, 因此不太容易立即发现如何启用新的AlternateMouseScroll选项。

正如路径作者Filippo Valsorda所述, 一旦安装了iTerm2的夜间构建版(仍未出现在1.0.0.20140629中), 只需运行此命令:

$ defaults write com.googlecode.iterm2 AlternateMouseScroll -bool true
重新启动iTerm2,当终端处于类似于less、vim和emacs等程序使用的“替代屏幕”(直接寻址)模式时,所有窗口将报告滚动事件作为上/下箭头键转义符。
对于像vim和emacs这样提供额外鼠标支持的应用程序, 您仍需要启用鼠标报告模式, 因为此自动模式切换仅启用滚动。

1
太棒了!但是在tmux中无法正常工作。在tmux中使用less时,它会像通常一样响应滚动,访问tmux窗格历史记录。我有点困惑。我现在不能研究这个问题,但我想知道是否有一种方法可以告诉tmux以特殊的方式处理less。我认为tmux认为(正确地...)less不处理鼠标滚轮,因此它继续覆盖滚轮功能。 - Steven Lu
根据Filippo Valsorda的原始帖子中的评论,我怀疑您需要将“set-window-option -g mode-mouse on”添加到您的“~/.tmux.conf”文件中。 - Alex Dupuy
3
对我来说这行不通,我使用的是iTerm 2.1.1,我已经尝试了这里提到的所有方法。 - r1ckr
在iTerm2上的Vim中,我试图用鼠标滚轮向上和向下滚动(不起作用),然后尝试了一下上下箭头键,窗口顶部弹出了一个小提示,询问我是否希望鼠标滚轮在图形程序中滚动。我点击了“是”,一切都很好。太棒了。 :) - Wildcard

3

终于做到了,我花了很多时间寻找并试图解决问题,最简单的步骤如下:

  1. 安装2.9测试版

  2. 完成


1

目前还未实现此功能。

iTerm 2问题跟踪器中有一个关于实现它的开放问题。


是的,这是作为对我在此处和iTerm2邮件列表上提出的问题的回应而添加的。 - Ruben Verborgh

1
less的最新版本支持--mouse和相关标志,因此无需向备用屏幕发送箭头键。

1

不是楼主提出的问题,但是对于在此处尝试让它在tmux中工作的任何人,借鉴 choco 通过this github comment给出了一段代码片段,添加到您的tmux.conf中以正确处理替代屏幕(例如less、vim):

# Check if copy-mode or any mouse flags, then send mouse events
# or check if we're in alternate screen end send navigation keys (up, down)

bind -n WheelUpPane if-shell -Ft='#{?pane_in_mode,1,#{mouse_any_flag}}' \
        'send -Mt=' 'if-shell -Ft= "#{alternate_on}" \
        "send -t= Up" "copy-mode -et= ; send -Mt="'
bind -n WheelDownPane if-shell -Ft= '#{?pane_in_mode,1,#{mouse_any_flag}}' \
        'send -Mt=' 'if-shell -Ft= "#{alternate_on}" \
        "send -t= Down" "send -Mt="'

注意,这不需要其他答案提到的项偏好更改,但它也不会受到其影响。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接