在 macvim 中将 jj 映射到 escape 有效,但在终端 vim 中无效

在 macvim 中将 jj 映射到 escape 有效,但在终端 vim 中无效

在我的 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 可以工作了!

相关内容