mac-vim 按上下左右出现ABCD

今天把hexo迁移到mac上了,写hexo blog的利器自然是vim啦。果断下载自己的vimrc,稍微改改配置就用在了mac上,各种插件和体验都很好。

然而,我作为vim的非忠实粉丝,还是习惯用up/down/left/right方向键来移动光标,至于k/j/h/l是什么鬼,没听说过。然而,当我愉快地在insert模式下按下方向键时,A/B/C/D跳出来了…… 哎!Vim大哥,我不是要唱字母歌的有木有!!!

于是,我开始在google大大上搜寻解决方案,其中一篇文章Fix arrow keys that display A B C D on remote shell 给出了21种解决方案,真是“诚意满满”,然后我开始尝试。下面给出几个有代表性的。

1. 改变term

直接输入

1
:set term=ansi

或者

1
:set term=xterm

嗯,的确解决了问题。哎,等等,我好看的vim主题去哪了,作为外貌协会的我肯定不答应!再换一个。

2. 用imap

在vimrc文件中输入以下代码

1
2
3
4
imap ^[OA <ESC>ki  
imap ^[OB <ESC>ji
imap ^[OC <ESC>li
imap ^[OD <ESC>hi

注意,这里的^[要通过<C-v><ESC>按出来。
嗯,的确是可以了,但是每次按完方向键,都会自动从insert模式回到normal模式,这也还是有点不爽。不过这个方案我还是忍了蛮久。

3. 好用但不知道原理的解决方案

最近还是发现 方案2 不好用,但给出的解决方案都不能满足我的需求,于是我开始自己尝试。
一开始把imap ^{OA <ESC>ki注释掉,发现竟然按up方向键仍然在insert模式,且没有字母A。太棒了,然后我依次把后面几行也注释掉,并尝试,都没什么问题。但注释到最后一行的时候,A/B/C/D又跳出来了。好吧,那我试试下面的方案呢?

1
imap ^[OE <ESC>hi

这里把D改成E,晕,竟然解决了我的问题,真是好用!但是,原理是啥?imap的映射表现之前很奇怪,而E是不存在的,反而就解决了A/B/C/D的问题…如有高人知道原因,请不吝赐教。