Linux 控制台中忽略 PgUp 上的 Ctrl 修饰键

Linux 控制台中忽略 PgUp 上的 Ctrl 修饰键

我在单用户文本模式下运行 Linux(如这里所述)。Ctrl+PgUp并且Ctrl+PgDn表现不如预期。使用cat -v -显示终端代码,我看到PgUpCtrl+PgUp都产生相同的代码^[[5~。在图形模式下执行同样的事情,我看到PgUp=>^[[5~Ctrl+PgUp=> ^[[5;5~(并且两个键都按预期工作)。因此我推测:

  • 这不是硬件问题
  • 映射PgUp=>^[[5~正在按预期工作
  • 问题Ctrl+PgUp看起来就像是PgUp一旦到达终点站。

对于我的用例(Vim),我可以配置PgUp为被视为Ctrl+PgUp,但如果可能的话,我希望它们具有不同的行为。

我可以编辑一些配置来解决这个问题吗?在字符序列到达终端之前,是否有任何东西会修改它们?

进一步调查的更多记录:

  • 我不需要启动到文本模式,只需进入 tty1 ( Ctrl+Alt+F1) 即可重现此情况。
  • 我可以在另一台机器上重现它。
  • 按照 dirkt 的建议,我运行echo $TERM并得到了linux

答案1

这个有用的答案让我找到了解决方案。我的默认键盘映射(从 获得sudo dumpkeys)包含

keycode 104 = Prior
...
string Prior = "\033[5~"

我补充道

control keycode 104 = F105
...
string F105 = "\033[5;5~"

对于 也类似PgDn。请注意,别名不能是任意字符串;它必须是 列出的键符之一sudo dumpkeys -l,因此我选择了未使用的 F105。

现在在图形模式下cat -v -显示^[[5;5~+ 。Vim 仍然没有按预期做出反应(CtrlPgUp不确定为什么,因为它在图形模式下工作),但至少Ctrl+PgUp产生了与 不同的控制序列,我像往常一样PgUp重新映射它:.vimrc

nnoremap ^[[5;5~ :tabp<Enter>

相关内容