![在 macvim 中将 jj 映射到 escape 有效,但在终端 vim 中无效](https://linux22.com/image/1429409/%E5%9C%A8%20macvim%20%E4%B8%AD%E5%B0%86%20jj%20%E6%98%A0%E5%B0%84%E5%88%B0%20escape%20%E6%9C%89%E6%95%88%EF%BC%8C%E4%BD%86%E5%9C%A8%E7%BB%88%E7%AB%AF%20vim%20%E4%B8%AD%E6%97%A0%E6%95%88.png)
在我的 vimrc 中我有:
inoremap jj <ESC>
使用最新的 macvim,我可以按 jj 然后从插入模式跳转到命令模式,但是在 iterm2 中使用相同的 vimrc 和常规 vim,它只会插入两个“j”...
我是否需要设置 vim 或 iterm 才能使其正常工作?
我目前正在使用 Yosemite,但这个问题在 Maverics 中也存在。此外,按键映射在 osx 的 Terminal.app 中也不起作用。
更多的研究似乎表明,vim 无法识别我双击的任何键。即使我这样做:
inoremap jj :hello
我还是没看到它起作用。
答案1
我发现github讨论 Yosemite 中的 iTerm 问题。以下是通过Homebrew 的问题。
您在使用 Yosemite 吗?终端中的按键绑定是否正常工作?根据此问题,似乎是 Yosemite 中的 iTerm 出了问题。
答案2
从终端 vim 尝试运行:imap
。这应该会列出所有插入模式映射。jj
映射会显示出来吗?如果没有,请尝试从该 vim 手动定义映射,看看是否有效。
我猜想是您的终端运行的是不同版本的 vim,它正在从不同位置读取 vimrc。尝试:echo $MYVIMRC
从终端 vim 和 macvim 中查看它们是否引用同一个文件。如果它们不同,您只需将映射添加到终端 vim 正在使用的 vimrc 中即可。不过,最好协调 vim 版本的差异,这样您就不必维护两个配置文件。
答案3
我找到答案了!不久前,我在 vimrc 中添加了一些内容来删除插入离开延迟:
if ! has('gui_running')
set ttimeoutlen=10
augroup FastEscape
autocmd!
au InsertEnter * set timeoutlen=0
au InsertLeave * set timeoutlen=1000
augroup END
endif
我删除了它,现在 jj 可以工作了!