GNU 屏幕配置以实现最佳键码识别

GNU 屏幕配置以实现最佳键码识别

目前,GNU screen 会破坏某些按键,例如 CTRL 与箭头键的组合,这样,例如在 vim 插入模式下,CTRL-PGUp 会将下一个/当前单词大写(或类似内容)。我希望它能够非常透明地工作,这样功能就与它未运行时相同(除了 CTRL-a 控制序列之外)...这可能吗?

此外 — — 我怀疑这或多或少是一个单独的问题 — — 我希望滚轮能够在会话日志中向后滚动,而不是像现在这样循环浏览历史记录。可行吗?或者也许可以将其设置为模拟更大的屏幕尺寸,以便运行的终端应用程序可以将该文本保存在其会话日志中。无论哪种方式,目标都是能够使用鼠标滚轮和/或 Shift-up-arrow 在会话日志中向后滚动。

答案1

您可以更改屏幕上的默认按键,但您会遇到同样的问题,只是使用其他按键。屏风使设置屏幕的基本按键更加容易。在 byobu 中,使用鼠标滚轮循环返回会话日志的功能也已激活,因此您可以使用它或查看它在 中的设置方式/usr/share/byobu/profiles/common

答案2

对于滚轮,您希望在您的~/.screenrc

# scrollback by inhibiting switching to terminal emulator's alternate screen
termcapinfo xterm*|rxvt*|kterm*|Eterm*|putty ti@:te@
# then turn on alternate windows within screen
altscreen on

对于光标键,这取决于您的终端仿真对于调用 screen 的窗口中声明的终端类型的准确性,以便它能够正确进行映射。许多终端仿真器通过 声称$TERM是“xterm”。但它们不是,而且它们对 xterm 的模拟程度还不足以正确地声称这一点。通常,降级到声明类似的东西vt220就足以改善我的情况,但我不记得 screen 的情况——我只使用 xterm 本身。您可以运行各种测试来查看您的终端仿真器在假装是 xterm 时表现有多糟糕,而实际上它不是。

要在事后修复问题,请使用bindkeyscreen 命令。screen(1) 中对此进行了说明,如果您使用 ^A:(或者您将 screen 的转义符映射到的任何位置,如果不是 ^A(我使用 ^])),那么您可以键入^A:bindkey -d以查看当前映射。

答案3

虽然不太理想,但你可以将其.vimrc作为立即修复:

nmap <ESC>[5;5~ <C-PageUp>
nmap <ESC>[6;5~ <C-PageDown>

来源于此错误报告

或者,您可以告诉vim它改变对 PgUp/PgDn 的识别:

set t_kN=<ESC>[6;*~
set t_kP=<ESC>[5;*~

从某种程度上来说,前者更好,因为这意味着你的 PgUp/PgDn 仍然可以在 之外工作screen

相关内容