2011-08-25 10 views
20

Eclipseのようなスマートセミコロン挿入を処理できるVimプラグインはありますか?Vimスマート挿入セミコロン

例(パイプ文字は、挿入カーソル):同様

foobar();| 

foobar("blah");| 
:私はセミコロンを入力

foobar("blah|") 

Iセミコロンを入力

foobar(|) 

私は、元のカーソル位置にセミコロンをしたい場合は、私はスマート再位置の後にバックスペースキーを押す:

foobar("hello|") 
foobar("hello");| 
foobar("hello;|") 
+1

実際に文字列リテラルの中にセミコロンを挿入する場合はどうすればよいですか? –

+2

Eclipseでは、スマートセミコロンの挿入後にバックスペースを押すと、セミコロンが元のカーソル位置に置かれます。 – dteoh

+4

理想的な解決方法:Pythonを使用する。 –

答えて

24

私はこのマッピングを使用します。

inoremap <leader>; <C-o>A; 

私はセミコロンを使用しているためそれは;ではありませんしばしば複数のコンテキストで使用されます。

  • <C-o>は、1つのノーマルモードコマンドを入力するために使用されます。
  • A;は、「行末に;を追加する」という意味です。
+3

@dansomething:ああそう!その答えから、私は '〜/ .vimrc'で何度もその行を修正しました。ここに現在の化身があります:inoremap ; m' A; '' – romainl

+0

あなたのマッピングでは、vimは各キープレスで2番目の文字を待ちます。 – Koshimitsu

+0

@Koshimitsuこれは標準的な動作であり、自分自身を一時停止する場合にのみ気付きます。 – romainl

0
" ftplugin/c/c_snippet.vim 
inoremap <expr> <buffer> ; getline('.')[col('.')-1:-1]=~')$' ? '<right>;' : ';' 

スニペットエンジンがオープンブラケットが改行上にある場合、それは混乱物事を意志

for (...|) { 
    <+code+> 
}<++> 

に展開する場合、このバージョンでは、forの問題を提起してはなりません。

最初の質問に答えるために正規表現を'"\=)\+$'に簡単に変更できます。

inoremap <expr> <buffer> ; getline('.')[col('.')-1:-1]=~'"\=)\+$' ? '<end>;' : ';' 

しかし、私は良い考えだとは思わない。その場合には、<bs>のマッピングは次のようになります。

inoremap <expr> <buffer> <bs> getline('.')[:col('.')-2] =~ '.*")\+;$' ? '<bs><c-o>F";' : '<bs>' 
10

私は同じことをしたい、私は、全体の夜それに動作するコードのトンが、最後に、私は簡単な解決策を得ました。

inoremap ;<cr> <end>;<cr> 

と私はブレースにいる場合は、この

foo({ 
    | 
}) 

のように私はこの

inoremap ;<cr> <end>;<cr> 
inoremap .<cr> <end>. 
inoremap ;;<cr> <down><end>;<cr> 
inoremap ..<cr> <down><end>. 
を行うために ;;<cr>..<cr>を押すと、私は、末尾にセミコロンやドットを追加したいです
2

次の関数とマッピングを使用して、行末にセミコロンを挿入し、空きスペースを削除します。

押す

log.warning("you miss the |identifier") 

imap <leader>. <C-R>=Semicolonfun()<CR> 
fun! Semicolonfun() "{{{ 
    call setline(line('.'), substitute(getline('.'), '\s*$', ';', '')) 
    return "\<End>" 
endfunction "}}} 

は、だからあなたのようなものを持っている場合。または、。あなたがリーダーを再マップする場合は、次を得る:

log.warning("you miss the identifier");| 
5

あなたはCosco.vimプラグインを試してみてください。

関連する問題