如何在iTerm2中关闭“滚动历史记录”?

458

我已经安装了新的iTerm 2。 在顶部的黄色栏中,它问我是否要启用鼠标功能。不幸的是,我不记得确切的句子了。

由于疏忽,我批准了。现在当我在iTerm中使用鼠标滚轮时,它不再向上滚动,而是触发命令历史记录,就好像我按了向上光标键一样。

我在哪里可以切换此选项以再次关闭它?


7
我假设您使用的是iTerm2.9,并且看到的消息是“您是否想要滚轮在类似这样的交互式程序中移动光标?”。然而,我找不到切换它的界面,您还有这个问题吗? - sel-fish
1
是的,但只有当我通过ssh登录到服务器时才能连接。我不知道这可能是如何连接的。 - Gambo
只有当我通过ssh登录到服务器时,你是指当你使用iTerm2进行本地操作时,这种情况不会发生吗?在“通过ssh登录到服务器时”你使用不同的“配置文件”吗? - sel-fish
必须发送终端控制字符以打开和关闭备用屏幕。我认为长期来看最好(不特定于iTerm2、vim或less)学习该控制字符是什么。它可能是 ESC [ ? 1 0 4 9 lESC [ ? 1 0 4 7 lESC [ ? 47 l(https://www.gnu.org/software/screen/manual/html_node/Control-Sequences.html)。 - dlamblin
2
这对我来说是突然发生的...当你试图查看日志时,这很令人沮丧。 - SgtPooki
2
这是远程设置到您的终端的终端仿真模式(备用屏幕),然后保持开启状态,如果您意外退出程序设置(如 less、vim 或其他程序),则不会被重置(例如断开 ssh)。命令“reset”会断言重新设置终端的初始条件。我知道它有一个可怕的名称,可以先阅读 man 页面。同样,“tput rmcup”将关闭它,但是要确保它已经打开。可能有一种方式来询问显示状态,但终端变得复杂。 - dlamblin
10个回答

760
一些终端,包括iTerm2,在运行全屏程序如viscreentmux时,会有一个特性改变滚轮鼠标的行为。当这些程序使用替代屏幕时,可以提供有用的功能。通常情况下,在iTerm2中使用替代屏幕时,滚轮鼠标像滚动条一样,上下滚动整个屏幕。但启用此功能后,iTerm2会发送光标上/下键,使您的命令历史更改。
如另一条评论所建议的,选择首选项菜单:

enter image description here

在此,选择“高级”选项卡。向下滚动至“鼠标”部分。

enter image description here

并将切换到备用屏幕模式时滚动轮发送箭头键的选项从 切换到 。更改生效需要重新启动iTerm2。(使用iTerm2 v3.1.5 版本,更改无需重新启动)。


2
在写评论之前,我进行了测试 - 仅切换选项是不够的。 - Thomas Dickey
7
不需要重新启动3.0.12才能生效。 - dhempler
31
我喜欢 Vim 中的这个功能,并使用它。如何在给定终端窗口中“退出”备用屏幕模式?更新:在处于备用屏幕模式的终端中,打开一个将激活备用屏幕模式的终端程序,然后干净地退出该程序即可。这暂时解决了问题。我认为这表明问题是由于以不寻常的方式退出使用备用屏幕特性的程序导致的。 - Nathan Basanese
20
先生,您使我免于纯粹的疯狂。 - B.K.
3
这种行为默认启用真的很让人恼火。吓坏了我。 - WestCoastProjects
显示剩余9条评论

113

如果你陷入了滚动历史模式,你可以通过运行vi并退出来摆脱。你也可以选择另一个使用备用屏幕的程序,然后退出。

理论上,使用鼠标滚轮滚动历史记录是不应该发生的。但在实践中,由于有时备用屏幕模式没有正确切换回来,这种情况会发生。接受的答案通过禁用一个有用的功能来解决这个问题,即使用鼠标滚轮或触摸板在vi、less等程序中滚动。您可以在高级首选项中保留此选项:

备用屏幕模式下滚轮发送箭头键

将其设置为“是”。有时你会被困在滚动历史模式中。但如果你知道如何逃脱,这不是个问题。


3
谢谢你的建议!这对我很有帮助 :) - jj172
1
谢谢!但是在我的情况下,进入和退出vi并没有帮助,但是在进入man页面并按q退出后它起作用了。 - Frax
2
这真的很有帮助。突然间滚动屏幕会在命令行中添加[[A^[[B^,而不是滚动窗口。我知道这不是正常的行为。在那之前,我把电脑留在了一个SSH shell中的nano里,当我关闭笔记本电脑时,它就断开了连接。这个突然的退出显然是罪魁祸首。在iTerm2中打开一个新标签页就解决了这个问题。 - Colin Marshall
1
不幸的是,当使用 screen 时,您无法使用此技巧退出备用屏幕模式。因此,如果您经常使用 screen(像我一样),完全禁用该功能可以拯救生命。 - mvreijn
我更喜欢这个答案,因为它对于使用触控板在全屏应用程序中导航非常有用,所以在首选项中禁用此功能对我来说不是一个好选择 :) 谢谢分享这个提示 :) - Patrick Ferreira

67
你可能只需要退出备用终端。
尝试: tput rmcup

2
好答案A+。 - a2f0
更好的答案 - 这样可以让你在vim中滚动时仍然能够滚动历史记录。谢谢! - JonLuca
2
有人可以对这个答案添加解释吗?tput和rmcup是什么?我的意思是具体的,显然最终结果是停止备用控制台模式。 - Tony
另一个选择是运行reset命令;这对我很有效,并且比tput rmcup稍微容易记住一些。 - undefined

24

iTerm2还支持在使用滚轮时按住Option键,强制窗口滚动,以防您需要在vim中继续使用滚轮。


2
这个可以工作,但是当我不需要按住选项键时,我该如何返回默认设置? - meso_2600

22

偏好设置:高级选项:鼠标:在交替模式下滚轮发送箭头键


2
我遇到了与描述相同的问题,但在最新版本的iTerm中,"Mouse"选项不在"Preferences: Advanced"下。只有触发器、智能选择和语义历史。有人知道其他修复方法吗? - mikeLspohn

5
您看到的行为是在替代屏幕中预期(且正确)的行为。您唯一遇到的问题就是掉入了bash,或者其他类似的操作,可能是在失去连接的情况下或从已终止的vim或less中掉出来。例如,您正在 less +F /var/log/something 中并断开了连接。

你会看到有人已经写了tput rmcup命令以返回主屏幕。

我还查找了一些终端控制字符。它可以是任何一个:ESC [ ? 1 0 4 9 lESC [ ? 1 0 4 7 lESC [ ? 47 l (gnu.org/software/screen/manual/html_node/Control-Sequences.html),首选第一个。

一般来说,在iTerm2中我经常使用echo -e '\e[?1049l'。实际上,我并不认为rmcup更容易记忆,恢复控制台上的内存?。


1
如果您使用的是较新版本的MacOS(我的是Monterey 12.0.1),并且在偏好设置中看不到“鼠标”选项,则可以通过进入“终端 -> 首选项 -> 概要文件 -> 键盘”选项卡,取消“滚动备用屏幕”的复选框来找到此选项,如下图所示(红框部分):

enter image description here


0
我遇到了同样的问题,尝试了很多解决方法都无效。最终解决方法是关闭安全键盘输入,现在在macOS 10.13上,使用鼠标滚动时它可以像我期望的那样在ssh和终端模式下正常工作!

-1
截至2023年,按下“CMD + R”可以退出“备用模式”。

-1

2022年更新

在首选项 -> 配置文件 -> 终端中 输入图像描述

取消勾选

  • "在备用屏幕模式下保存行" 和
  • "当应用程序状态栏存在时保存行"

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