如何映射 PageDown 和 PageUp 键以正常运行

mtk*_*mtk 3 vim navigation keymap

当我使用vi或打开文档时vim,我无法使用Page UpPage Down键导航页面。在按下这些键时,vim 似乎表现异常,并更改光标下方的字符大小写。然后需要几秒钟才能再次返回insert模式。

请让我知道,如何把这些键映射,以便在按他们,我可以通过网页流畅,就像滚动Ctrl+(f/ b/ u/ d )。

更新

机器和 Vim 信息

$ cat /etc/*-release  
Red Hat Enterprise Linux Server release 5.5 (Tikanga)


$ vim --version
VIM - Vi IMproved 7.0 (2006 May 7, compiled Jun 12 2009 07:08:36)
Run Code Online (Sandbox Code Playgroud)

笔记

我正在使用 Putty 连接到这台机器。

Red*_*ick 7

更新:

我正在使用 Putty 连接到这台机器

然后我猜对了,下面的答案可能适用。


原答案:

您的问题中没有足够的信息来确定您的问题,在我们等待的同时,让我为观众提供一个小故事:

终端模拟器和编辑器

如果您使用诸如 Putty 之类的 xterm 模拟器访问 Linux 计算机,则您的 PgUp 密钥会向Escape [ 5 ~Linux 系统发送四个字符。

Linux 系统处理这个,然后将任何未操作的击键传递给应用程序。

应用程序 vim 使用系统库(我相信)根据环境变量 TERM 的值和相应的条目将字符序列转换回“键” terminfo

如果 terminfo 没有将 PgUp(或任何其他键)定义为Escape [ 5 ~,Vim 将(可能)单独处理这四个字符。

"许多光标键代码以 Esc 开头。Vim 必须确定这是按 Esc 键还是光标键序列的开始。它等待下一个字符到达。如果它没有在一秒内到达假定为单个 Esc。” 所以vim 稍等片刻,看看Esc 是否要退出插入模式。

[5是有效的 Vim 命令。但也许 Vim 将 Esc 视为它无法识别的转义序列的开始信号——它必须猜测该序列在哪里结束并从该点重新开始将字符解释为命令或数据。

~ 是一个 vim 命令,用于切换光标下字符的大小写。

一个美好的结局

正确设置 TERM(以匹配 Putty/模拟器设置)并确保 terminfo 具有 PgUp 等的定义。在 Unix 领域,在 IBM PC 诞生之前就存在键盘,其中一些有一个Previous Page键,因此该键功能被命名为kpp

  $ infocmp xterm | grep kpp
    knp=\E[6~, kpp=\E[5~, kri=\E[1;2A, mc0=\E[i, mc4=\E[4i,
Run Code Online (Sandbox Code Playgroud)

后记

如何映射这些键

据我所知,Putty 没有任意键映射功能(我认为它在愿望清单中)所以......

  1. 配置 Putty 以模拟众所周知且定义明确的终端类型。不幸的是,没有像 xterm 这样的东西。

  2. 确保 Putty 告诉 Linux 机器它正在模拟什么终端类型。部分原因是通过配置 Putty 的设置,部分原因是使用与 TERM 通信的协议(例如 Putty 的 ssh 支持)而不是不通信的协议(Putty 的 telnet 支持)。

  3. 确保 TERM 实际上设置为它应该设置的值 ( echo $TERM)。

  4. 确保该 TERM 值的 terminfo 条目定义了您想要的键(见上文)。

  5. 确保 PgUp 密钥发送它应该发送的内容。在 Vim 中进入插入模式并按Ctrl+V然后PgUp