vi
当我使用或打开文档时vim
,我无法使用Page Up和Page 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)
笔记
我正在使用 Putty 连接到这台机器。
答案1
更新:
我正在使用 Putty 连接到这台机器
然后我猜对了,下面的答案可能适用。
原始答案:
您的问题中没有足够的信息来确定您的问题,在我们等待的同时,让我给观众提供一个小故事:
终端仿真器和编辑器
如果您使用 xterm 模拟器(例如 Putty)访问 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-land 中,键盘在 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,
后记
如何映射这些键
据我所知,Putty 没有任意键映射功能(我认为它在愿望清单中)所以......
配置 Putty 来模拟一个众所周知且定义明确的终端类型。不幸的是,没有这样的终端类型,所以只能使用 xterm 之类的东西。
确保 Putty 告知 Linux 计算机它正在模拟哪种终端类型。部分方法是通过配置 Putty 的设置,部分方法是使用可以通信 TERM 的协议(例如 Putty 的 ssh 支持),而不是不通信的协议(Putty 的 telnet 支持)。
确保 TERM 确实设置为应有的数值 (
echo $TERM
)。确保该 TERM 值的 terminfo 条目定义了您想要的键(参见上文)。
确保 PgUp 键发送了正确的内容。在 Vim 中,进入插入模式,然后按Ctrl+VPgUp
答案2
export TERM=xterm 应该可以解决你的问题