Vim:避免递归<esc>快捷方式

时间:2016-06-02 14:34:14

标签: recursion vim

与大多数vim用户一样,我有一个方便的<Esc>快捷方式:

:nnoremap ;j <Esc>

但是现在我有以下情况: 我有一个函数,它在我的文档中插入if statement

autocmd FileType c nnoremap <localleader>si :call RemapTabC()<CR>iif ()<CR>{<CR>}<Esc>--f)i

RemapTabC()看起来像这样:

function RemapTabC()
    inoremap <buffer> <Tab> <Esc>:call UnmapTab()<CR>jo
    inoremap <buffer> <Esc> <Esc>:call UnmapTab()
endfunction

我认为这个错误应该是显而易见的。 我使用<localleader>si,然后会出现模板。我的光标在条件子句中。现在我输入我想要的东西,现在我有两个选择:

  1. 我点击Tab。工作正常,它将我的光标放入if语句主体。
  2. 我点击Esc。工作也很好,但现在如果我使用我的重新映射;j,因为它将直接映射到<Esc>,而不是我重新映射的<Esc>
  3. 我可以递归地制作nnoremap ;j <Esc>,但我真的害怕它会造成严重破坏。我还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试改为倾听InsertLeave事件,而不是使用<esc>

您也可以让<tab>始终处于活动状态并准备跳转到下一个占位符 - 是的,最后,您将定义已经定义了几个“大”插件。