将 tail -f 和 ssh-ed 运行到机器中时在终端 (OS X) 中滚动会产生一些奇怪的字符

ree*_*rix 1 ssh terminal tail osx-yosemite

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

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

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

Ken*_*ter 10

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

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

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

但它们都是关于以前版本的 OSX,随着时间的推移,终端似乎在这方面发生了变化。本文讨论了它在 Yosemite 中的工作原理,但在技术细节上有点欠缺。剩下的就是我在优胜美地玩终端时发现的。

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

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

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

终端还提供了一个称为备用屏幕的功能。全屏程序喜欢vimless可以将终端切换到备用屏幕来显示自己的内容。当您退出此类程序时,终端会切换回主屏幕。我提到这一点是因为终端的滚动行为可以在备用屏幕上改变。

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

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

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