jip*_*pie 3 vim xterm console key-mapping
通常当我想vim
在桌面konsole
会话中运行时,我确保将 TERM 变量设置linux
为箭头键在插入模式下不起作用TERM=xterm
。它们显示大写 A..D 而不是移动光标。
现在我认为这是错误的做事方式,konsole
或者xterm
实际上是类型xterm
。
有没有更好的方法让箭头键在vi
/下工作vim
?
操作系统:Kubuntu 13.04(干净安装)
我想我知道发生了什么。
您尚未配置vim
为禁用vi
兼容模式。
在 中vi
,您只能在命令模式下按方向键。在插入模式下,按箭头键发送的字符序列被视为单独输入的字符。
现在,在启动时,vi
将终端设置为键盘传输模式(kx)。在这种模式下,终端通常在按下箭头键时发送与不按下时不同的字符序列。
例如,Up密钥\eOA
以 kx 模式发送,\e[A
何时不发送。
要将终端设置为 kx 模式,它会smkx
在 terminfo 数据库中查找(设置模式键盘传输)功能以获取 的当前值$TERM
。
如果您查看,和的smkx
功能,您会看到:xterm
konsole
linux
$ infocmp -1 linux | grep smkx
$ infocmp -1 xterm | grep smkx
smkx=\E[?1h\E=,
$ infocmp -1 konsole | grep smkx
smkx=\E[?1h\E=,
Run Code Online (Sandbox Code Playgroud)
这smkx
在linux
条目中没有定义。
这意味着当您以 开头vim
时TERM=linux
,vim 不会将终端设置为 kx 模式,这意味着它会发送,\e[A
而不是\eOA
在您按下Up键时发送。
现在,\eOA
当您处于插入模式时,vim会做什么?\e
(ESC),离开插入模式并返回命令模式。O
打开一个新行并再次进入插入模式,A
插入A
字符。
虽然\e[A
, \e
(ESC) 离开插入模式,[A
是一个未知的组合(in vim
,[
是一个前缀,后面总是跟另一个字符),所以什么都不做。
所以你需要做的是:保持$TERM
原样,在vi兼容时不要在插入模式下使用箭头键,或者set nocp
向你添加一个,~/.vimrc
这样你就可以在插入模式下使用箭头键。