Vim缩写-以插入模式结束

Vim缩写-以插入模式结束,vim,abbreviation,Vim,Abbreviation,我们已经通过一些指南来设置一些简单的Vim缩写。我就快到了,我就是找不到如何以插入模式结束 iab cl console.log()<Left> 我所拥有的: iab cl console.log()<Esc>F%s<c-o>:call getchar()<CR><Left><Left> 我想发生的事: Same thing except I want to enter insert mode. 我所尝试的: Afte

我们已经通过一些指南来设置一些简单的Vim缩写。我就快到了,我就是找不到如何以插入模式结束

iab cl console.log()<Left>
我所拥有的:

iab cl console.log()<Esc>F%s<c-o>:call getchar()<CR><Left><Left>
我想发生的事:

Same thing except I want to enter insert mode.
我所尝试的:

After <Left> I've tried:  <Insert>, i, and <Ins> with no luck.
在我尝试之后:,我,而且没有运气。

问题在于缩写遇到错误并停止执行

这部分
F%s:call getchar()
对我来说没有意义,看起来它会导致错误。问题可能出在多个方面。但最有可能的是
F%
,因为它找不到向后的百分号

我认为固定映射应该与此类似(但是我不认为这是您想要的),它确实以插入模式结束,因为缩写成功完成,并且缩写不做任何事情来退出插入模式

iab cl console.log()<Left>
iab cl console.log()
看一下这个,删除尾随的空白。根据缩写。

最终解决方案(使用提供的线程FDinoff中的信息)是:

func-Eatchar(pat)
设c=nr2char(getchar(0))
返回(c=~a:pat)?“”:C
endfunc
iabbr cl console.log()=Eatchar('\s')

我对
F%s:call getchar()
部分感到困惑。这应该做什么?要删除尾随空格,请从以下位置获取:您应该使用snipmate或ultisnips之类的代码段插件。
F%s:call getchar()
删除前面的空格并从以下位置获取:。至于你发布的内容,虽然它以插入模式结束,但它在光标前放置了一个空格。你的链接提供了问题的答案,谢谢@是的,那部分是断章取义的。除非在缩写中添加
%
,否则它不会起作用。
func Eatchar(pat)
  let c = nr2char(getchar(0))
  return (c =~ a:pat) ? '' : c
endfunc

iabbr cl console.log();<Left><Left><C-R>=Eatchar('\s')<CR>