Windows 终端中的终端分页

roo*_*kie 1 linux ssh terminal ubuntu

我最近必须设置一台 Windows 计算机。我通常远程进入 Linux 盒子(Ubuntu)进行开发,所以我使用“Windows 终端”应用程序和 Window 的内置 ssh 客户端来登录我的 Linux 盒子。现在我注意到我无法使用触控板/鼠标滚动

  1. git 日志
  2. 手册页
  3. git 差异

我必须求助于箭头按压,这不是我的首选方法。我一直无法弄清楚谁paging在这个工作流程中负责 -

  • Windows终端
  • Windows 的 ssh 客户端
  • 我的 Linux 盒子的寻呼机设置(默认寻呼机设置在less那里)

我在 Windows 上尝试过 Alacritty,得到了相同的结果,我还尝试过 WSL Ubuntu(在 Windows 终端内)通过 ssh 登录远程 Linux 机器,但没有成功。

有人可以帮助我了解如何在此设置中启用分页支持/触控板鼠标滚动支持吗?

use*_*686 6

在某种程度上,两者兼而有之。

\n

尽管终端有自己的“回滚”(您可以使用鼠标或滚动条访问),但全屏程序 \xe2\x80\x93 包括像 \'less\' \xe2\x80\x93 这样的寻呼机在运行时会故意禁用它(他们启用了所谓的全屏操作的备用屏幕模式),因为他们对终端的回滚没有足够的控制。因此,在此模式下禁用终端级滚动,并且所有滚动/分页均由“less”自定义完成。

\n

(从某种意义上说,这就是使用终端内寻呼机的全部意义,而不是仅仅将整个文本转储到终端并在终端级别滚动它。通过在内部进行滚动,“less”可以从顶部开始文件并让您向下滚动,而不是总是停在底部。)

\n

您的主要问题是“less”寻呼机根本不支持鼠标。(终端程序可以请求直接接收鼠标输入1 \xe2\x80\x93 例如,您会在 Vim 或 Elinks 或 WeeChat \xe2\x80\x93 中找到本机鼠标滚轮支持,但 \'less\' 分页器不会这样做这。)

\n

在完整的 Ubuntu 环境中,当您以某种方式能够在“less”内滚动滚轮时,这实际上是终端将滚轮事件转换为假的向上/向下箭头按键 \xe2\x80\x93 GNOME 终端如果应用程序尚未激活直接鼠标输入,则在备用屏幕模式处于活动状态时始终会执行此操作。

\n

(作为一个实际示例,如果您使用 手动要求终端切换到替代屏幕模式tput smcup,并且您使用的是 GNOME 终端,则鼠标滚轮将开始滚动您的 shell 历史记录。tput rmcup让您返回。)

\n

因此第二个问题是 Windows Terminal 也不提供滚轮事件模拟。它确实支持将真实的滚轮事件发送到支持鼠标的程序(同样,您可以在使用 Windows 终端时在 Vim 中滚轮滚动),但滚轮到箭头主要是 GNOME 终端和其他基于 vte 的终端所独有的。

\n

您的选择是:

\n
    \n
  • 在https://github.com/microsoft/terminal/上打开滚动模拟功能的功能请求(如果还没有)。
  • \n
  • 使用具有本机鼠标事件支持的寻呼机(例如PAGER=elinksvimpager使用 Vim 作为寻呼机)。
  • \n
  • 通过 WSLg 或 X11 使用 GNOME 终端(或其他基于 vte 的终端),而不是 Windows 终端。
  • \n
  • 根本不使用寻呼机,而是依靠终端的回滚。
  • \n
\n
\n

1然而,由于终端 API 在 Windows 中的工作方式,SSH 不是 100% 透明的(例如 ssh.exe 必须故意请求“类 Unix 终端”模式而不是传统的“WinNT 控制台”模式),重要的是,较旧的Windows 版本的 OpenSSH(我认为是 7.4p1)无法任何鼠标事件中继到远程端。如果您至少使用 Windows 20H2 并拥有 OpenSSH 8.1p1 或更高版本,此问题已得到修复 \xe2\x80\x93。

\n

  • 由于没有任何迹象表明回答者或提问者承认我对“tmux”的评论,我将解释:我相信“tmux”是另一种选择。@菜鸟![使用](https://superuser.com/a/1492018/432690) [`tmux`](https://superuser.com/a/1398132/432690) ([在服务器上](https://superuser .com/a/1288684/432690)) 并配置它[像这样](https://superuser.com/a/1319237/432690) (不要错过关于 `git` 的评论)。 (2认同)