2

我想在 Vim 中触发多行缩写,而不输入“触发”字符,并且光标在特定位置以插入模式结束。

我快到了,只是没能成功。

到目前为止,我已将以下内容添加到我的 _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( 
 )
{

}  

我最近询问并回答了一个关于防止在单行大小写中添加触发缩写的字符的问题。

这可能与多行缩写吗?

4

1 回答 1

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将吃掉任何空格或返回字符。我还删除了 and 之间的多余空格{}因为我想在您更新函数参数列表后,您将退出回到正常模式,然后跳下一行,j然后执行o以在函数块内打开一个新行。

于 2012-08-09T13:52:49.783 回答