在最近的 Ubuntu 升级之后,在 xfce4 终端中使用 vim 的行为发生了变化。快捷键“Shift+Page Up”和“Shift+Page Down”在 xfce4 终端中分别映射到“向上滚动一页”和“向下滚动一页”,即它们模拟了 UNIX 终端数十年来的行为。
不幸的是,一旦我在终端中启动 vim,似乎这些键就不再被处理了,因为它不会将终端回滚到启动 vim 之前的内容。使用 xterm 而不是 xfce4-terminal,一切都按预期工作。是否有任何设置可以让我恢复旧的 UNIX 行为,并且不会让终端根据当前在 shell 中运行的内容而采取不同的行为?
xfce4-terminal 是 1.1.3,vim 是 9.1。
终端有两个屏幕:正常屏幕和备用屏幕。
正常屏幕是您通常与 shell 交互、运行非全屏实用程序的地方。它有一个回滚缓冲区。
备用屏幕是全屏实用程序(例如文本编辑器)通常(但不一定)切换到的位置。备用屏幕没有回滚缓冲区。
判断您处于备用屏幕上的一种方法是,退出应用后,终端的先前内容将恢复。如果应用停留在正常屏幕上,则无法执行此操作。
VTE 是 Xfce 终端背后的终端仿真小部件,它至少在十年内一直具有相同的行为,并且这种行为最近没有改变:如果在正常屏幕上,则所述键会滚动缓冲区,如果在备用屏幕上,则在里面运行的应用程序会接收所述按键事件来执行任何它想做的事情。
虽然我认为这种可能性极小,但 Xfce 终端可能会以某种方式试图劫持此按键并做一些聪明的事情,并且该逻辑最近发生了变化。我发现更有可能的是您的 Vim 配置已更改:它现在切换到备用屏幕,而您不希望它这样做。检查您的 Vim 是否确实切换到备用屏幕(退出时会恢复终端的上一个屏幕),如果您正在寻找它,请在您的 Vim 配置中禁用它。有很多与“Vim”“正常屏幕”“备用屏幕”或类似关键词的网络搜索匹配的结果,我觉得在这里重复解决方案毫无意义。
(顺便说一句,让我提一下,终端仿真器之间可能会有细微的差别。例如,Xfce Terminal(VTE)在备用屏幕上时,根本不允许您访问正常屏幕的回滚缓冲区。相应地,滚动条占据了其插槽的整个高度,好像没有任何内容可滚动。与此相反,当您在备用屏幕上时,Xterm 允许您滚动回到正常屏幕的回滚。它不允许您使用上述热键执行此操作,因为它们会被发送到应用程序(就像在 VTE 中一样),但它允许您通过使用鼠标拖动滚动条来执行此操作。)
我经常遇到这种情况:我运行一个命令,它会脱口而出很多“东西”。
我不需要尝试在该终端中编辑,只需打开一个新终端并在该终端中编辑即可。
一种方法是通过菜单。我可以在各种位置/大小中打开它。如果它在“奇怪”的位置,我会运行一个我称之为“kt”的本地脚本,并将其链接到 gt 和 xt。