在一些 Linux 机器上,当我使用 vim 时,我可以顺利使用 PageDown、PageUp、Home、End 按钮,没有任何麻烦。然而在其他一些机器上,这些按钮会给我奇怪的字符。
这是为什么?我该怎么办?
谢谢!
答案1
我的第一个猜测是,在某些 Linux 机器上,你以“不兼容”模式运行,这种模式启用了很多额外的 Vim 功能,包括箭头键等,但那些键不起作用。
当您有 ~/.vimrc 时,Vim 会自动进入“nocompatible”模式,但某些发行版会安装设置“nocompatible”选项的系统 vimrc,即使没有 ~/.vimrc。
看:
:help 'nocompatible'
(使用单引号。)
答案2
我假设您在终端中运行 vim,而不是 GUI 版本 gvim。
当用户按下动作键(例如 PageDown)时,不同的终端会向其中运行的应用程序发送不同的字符或字符序列。为了确定当前终端发送的表示这些键的字符集或字符序列,Vim 会查阅 terminfo 数据库。它使用 TERM 环境变量来确定当前终端的类型,然后访问该终端使用的这些键的 terminfo 定义。
如果当前 TERM 值的键定义与您当前终端的功能相匹配,则一切正常。如果 TERM 的值对于您的终端不正确,或者 terminfo 数据库不完整或缺失,Vim 不知道如何解释终端发送的字符或字符序列,因此它只会将字符插入文本或将其解释为 Vim 命令。
问题最有可能的原因是 TERM 未针对您使用的终端正确设置。最直接的解决方法是找出您使用的终端类型,在 /usr/share/terminfo 或 /usr/lib/terminfo 中找到它的 terminfo 名称,然后在 ~/.bashrc 中输入如下一行:
export TERM=thetermifoname
例如,
export TERM=xterm