我想在Vim中触发多行缩写,而不输入'trigger'字符,并且光标在特定位置以插入模式结束。
我快到了,但是没能成功。
到目前为止,我已将以下内容添加到我的_vimrc:
" eat characters after abbreviation
function! Eatchar(pat)
let c = nr2char(getchar(0))
return (c =~ a:pat) ? '' : c
endfunction
iabbr <silent> if if ()<left><C-R>=Eatchar('\s')<CR>
:iabbr <silent> rfF <- function( )<CR>{<CR> <CR>}<Esc>3k$h<Insert><c-r>=Eatchar('\m\s<bar>/')<cr>
这主要是成功的,因为当我输入rfF Ctr-]
来触发缩写的扩展时会产生以下结果:
<- function( )
{
}
然而,结果取决于我如何触发缩写。
如果我用<space>
触发,括号之间的空格会扩展:
<- function( )
{
}
...如果我<CR>
:
<- function(
)
{
}
我最近问过,并且answered提出了一个关于防止在单行情况下添加触发缩写的字符的问题。
这可以用多行缩写吗?
答案 0 :(得分:1)
这就是我想出来的。
" eat characters after abbreviation
function! Eatchar(pat)
let c = nr2char(getchar(0))
return (c =~ a:pat) ? '' : c
endfunction
inoreabbr <silent> rfF <- function()<cr>{<cr>}<esc>2k$i<c-r>=Eatchar('\m\s\<bar>\r')<cr>
此命令m\s\<bar>\r
中的正则表达式将占用任何空格或返回字符。我还删除了{
和}
之间的额外空格,因为我想在更新函数参数列表后,您将退出到正常模式,然后使用j
跳转一行然后执行o
在功能块内打开一个新行。