当我在〜中开始使用空白.vimrc并向其添加imap jj <esc>
时,一切正常(即从插入模式键入jj退出 - &gt;正常模式)。但是当我向.vimrc添加更多内容时,除了进入普通模式之外,最终输入jj将跳过前面的光标,看似随机,短距离(几个字或几行)。我没有把它归结为我添加到.vimrc的任何特定内容 - 它只是在某些时候从正常工作到故障。然后,如果我删除了.vimmrc文件,重新使用一个新的.vimrc重新开始,那个奇怪的跳跃就会消失。
有关正在发生的事情的任何线索?
编辑:
我的完整〜/ .vimrc
set nocompatible
inoremap jj <esc>
就是这样。我已经重命名了/ etc / vim / vimrc&amp; / usr / share / vim / vimrc到vimrc.0,同样移动〜/ plugins&amp; 〜/ ftplugins。
:imap
&amp; :inoremap
只显示i jj * <Esc>
答案 0 :(得分:7)
我知道这已经存在很长时间了,但无论如何都要进行。
在“jj”的映射之后你碰巧没有任何评论吗?像:
ino jj <Esc> " map jj to escape key
也许在收盘后有一堆空格大于对齐评论以使它们漂亮......
如果是这样的话,我会将注释移到映射上方,这样vim就不会认为你正在键入一个转义符后跟一堆空格或制表符(这会根据你所处的位置以看似随机的方式将光标向前移动)
" map jj to escape key
ino jj <Esc>
要检查并查看问题是否确实是vimrc文件的格式,您只需在ex提示符下输入,然后查看它是否解决了当前会话的问题。
ino jj <Esc>
如果这样做后你的“jj”映射按预期工作,那么它可能是我所描述的一些变化。要验证vimrc文件的格式,请通过在ex命令提示符下键入以下代码来搜索空白字符(设置hlsearch会启用突出显示和/ \ s搜索空格。管道会按顺序执行它们。)。
set hlsearch | /\s
旁注。您可以做的一个很好的技巧是使用单个空格和注释来跟踪映射。这会让你超越你正在编辑的位置。
ino jj <Esc> " map jj to escape key
对新手用户的一个抱怨是,他们不喜欢位置在他们遇到逃生时如何移动到他们正在编辑的位置左侧的角色。就像你处于插入模式一样,光标位于“h”和“r”字符之间,如下所示:
one two th|ree
你击中逃生你将处于正常模式的“h”之上。映射后空格的技巧会让你超越“r”。
答案 1 :(得分:2)
您可能希望使用inoremap
代替imap
。这将阻止其他映射进一步替换您的映射。来自vim wikia:
“为简单起见,我们将展示:imap
,但小心翼翼的Vimmers习惯使用:inoremap
而不会尝试解释映射的结果(使用:imap
命令,扫描结果以查看它是否包含另一个映射。“
如果另一个映射包含j,则即使使用inoremap
,也可能会出现这种情况。
答案 2 :(得分:1)
调试时需要考虑的另一件事是全局vimrc
文件的存在,通常位于/etc/vimrc
您可能在全局文件中有一个与用户的~/.vimrc