通常,当我想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=,
这是smkx
不是在定义linux
条目。
这意味着,当您以开头vim
时TERM=linux
,vim不会将终端设置为kx模式,这意味着它将发送\e[A
而不是例如\eOA
在您按下Up键时发送。
现在,\eOA
当您处于插入模式时,在vim中会做什么?\e
(ESC),退出插入模式并返回命令模式。O
打开新行并再次进入插入模式,A
插入A
字符。
虽然\e[A
,\e
(ESC)叶插入模式,[A
是一个未知的组合(vim
,[
是一个前缀,后面总是跟着另一个字符),所以什么也不做。
所以,你需要做的是:保持$TERM
原样,不要用箭头插入模式键在vi兼容时或添加set nocp
到您~/.vimrc
在插入模式,所以你可以使用方向键。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句