在运行 tail -f 并 ssh 进入计算机时,在终端 (OS X) 中滚动会产生一些奇怪的字符

在运行 tail -f 并 ssh 进入计算机时,在终端 (OS X) 中滚动会产生一些奇怪的字符

我通过 ssh 连接到远程计算机并运行tail -f。每次我使用触控板向上/向下滚动时,都会产生一些奇怪的字符,例如

OB^[OB^[OB^[OB^[OB^[OOB^[OB^[OB^[OB^[OB^[O

以前没有发生过这种情况,它不允许我向上滚动查看以前的日志。为什么会发生这种情况?我该如何禁用它?

答案1

TL;DR:检查菜单设置“视图”->“显示/隐藏备用屏幕”。您可能处于“备用屏幕模式”。或者尝试在滚动时使用 SHIFT 键来获取其他滚动行为。

^[是 Control-leftbracket 的可打印表示,又称为转义字符。信息流显示这^[OB是向下箭头键的 xterm 转义序列(^[OA是向上箭头序列)。终端模拟 xterm,它将鼠标滚动转换为箭头键序列。

我发现了一些关于在终端中使用鼠标的过去讨论:

但它们都是关于 OSX 的早期版本的,而且似乎 Terminal 在这方面随着时间的推移发生了变化。本文讨论了它在 Yosemite 中的工作原理,但缺少一些技术细节。其余部分是我在 Yosemite 中使用 Terminal 时发现的。

终端有两种处理鼠标滚动的模式:

  1. 在一种模式下,滚动会导致终端滚动视口,因此您可以看到终端的回滚缓冲区(已滚动出屏幕顶部的行)。滚动终端时,您会看到 OSX 滚动条。
  2. 在另一种模式下,滚动会导致终端发送向上箭头和向下箭头序列。希望终端中运行的程序能够处理它们。

您可以通过按住 SHIFT 并滚动来临时切换模式。例如,当终端显示命令提示符时,滚动将滚动终端窗口,而 Shift-scroll 将滚动浏览您的 bash 命令历史记录。

终端还提供了一项功能,称为备用屏幕。全屏程序(例如vim或 )less可以将终端切换到备用屏幕以显示其自身内容。退出此类程序时,终端将切换回主屏幕。我提到这一点是因为 Terminal 的滚动行为可以在备用屏幕上发生变化。

通常,第一种滚动行为是主要行为,您必须按 SHIFT 才能获得第二种行为。但请转到终端->首选项->配置文件->键盘。底部有一个标记为“滚动备用屏幕”的复选框。如果选中该框,则滚动行为会在备用屏幕上反转。选中后,第二种滚动行为将成为备用屏幕的默认行为,您必须按 SHIFT 才能获得第一种行为。

例如,在命令行中,滚动鼠标可以查看终端的回滚缓冲区。但是开始vim编辑文件时,它会切换到备用屏幕,突然滚动鼠标会移动光标。这正是您在 vim 中想要的。

说到您的问题,听起来您的终端正在显示备用屏幕。有一个菜单选项可以切换(视图->显示/隐藏备用屏幕)。或者您正在运行的某个程序正在将终端置于备用屏幕模式。也许您正在使用screentmux或类似的东西?作为一种解决方法,您可以尝试使用 SHIFT 键来获得您想要的滚动行为。或者您可以取消选中该复选框。

答案2

我将终端仿真从 xterm-256color 更改为 vt100。我在“首选项”=>“配置文件”=>“高级”的“将终端声明为:”下拉菜单中执行了此操作。

相关内容