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空白または戻り文字を食べます。{との間の余分なスペースも削除しました。これは}、関数パラメーター リストを更新した後、終了して通常モードに戻り、1 行下にジャンプしてjから実行oして、関数ブロック内に新しい行を開くことを想定しているためです。

于 2012-08-09T13:52:49.783 に答える