OS X终端线不进入回滚

Modified on: Thu, 04 Jul 2019 00:40:02 +0800

我在使用Mac OS X的终端(TERM = xterm)时会出现问题:有时它会进入一种状态,即滚动顶部的行不会添加到回滚缓冲区。我没有使用screen或类似的;这是终端选项卡中的普通bash shell。

打开新标签后,它不会立即执行此操作。我相信这是我在问题标签中运行的一个副作用。我的猜测是它与xterm仿真有关,可能是滚动区域。

什么没效果:

  • 通过Shell菜单进行软硬重置
  • 在标签
  • 中运行reset

是否有可靠的方法来重置终端和/或xterm状态?

任何人都可以提供有关正在发生的事情的解释,即使唯一的解决方法是关闭标签并开启新标签吗?

最佳答案

这意味着终端正在使用备用屏幕缓冲区。有一个主屏幕,滚动到回滚日志,另一个屏幕没有。默认情况下,“全屏”或“屏幕导向”程序(如top,less,emacs,vim和screen)将终端切换到备用屏幕。

每个屏幕都有自己的内容和状态。使用备用屏幕可以让程序接管整个显示,然后通过切换回主屏幕,在退出时恢复之前的内容。

从Mac OS X Lion 10.7开始,终端有一个菜单项,可用于手动切换屏幕:

  

查看>显示/隐藏替代屏幕

这主要是为了在“全屏”程序退出后您可以在备用屏幕上查看或复制文本。 Xterm也有类似的命令。

例如,您还可以使用它手动强制程序使用特定屏幕来控制输出是否转到回滚日志。但是,如果您当前正在使用明确切换到备用屏幕的程序,如果在程序运行时将其强制进入主屏幕,则可能会混淆或获得意外结果,因此请谨慎使用。

根据程序的不同,它可能有一个命令行参数或一些其他方法来配置它以使用主屏幕。例如,less -X

某些terminfo条目专门用于禁止使用备用屏幕,例如xterm1TERM=xterm1 emacs将在主屏幕上运行Emacs。我不建议永久使用xterm1,因为与Lion上的默认xterm-256color相比,它会禁用许多其他有用的功能。

您还可以使用tput命令切换屏幕,以从shell或脚本内部发出转义序列。 tput smcup切换到备用屏幕,tput rmcup切换回主屏幕。

要查看当前正在运行的程序,请查看终端窗口或标签标题中显示的程序名称,或查看“检查器”窗口(Shell> Show Inspector)。检查器列表中的最后一个进程(通常)是使用屏幕的当前程序。这是您需要配置以使用主屏幕的那个。

作者:,Chris Page

相关问答

添加新评论