Vim C言語系の構文を持つプログラム言語用にVimを最適化する その2

2008/05/18 追記
snippetsEmu.vimプラグインを使用すると、以下と同じような動作をさせることが可能になります。
snippetsEmu.vimのほうが汎用的に使うことができ、また、プレースホルダによるジャンプも可能であるため、そちらを使用したほうがよいです。

動作

switch-case文記述中に:が押されたら:+break;を以下のように補完する

switch ( hoge ) {
  case 1:と入力すると
}

switch ( hoge ) {
  case 1:
    ←ここにカーソル
    break;
}
.vimrc
"switch-case文中の:を:+が入力されたときに+改行を行う
function GetColonForC()
  let line = strpart(getline('.'), 0, col('.') - 1)
  "switch文のcase or defaultを記述中か?
  let serchWords = [
    \ '^\t*case \=',
    \ '^\t*default$'
    \ ]
  let actions = [
    \ ":\<CR>break;\<UP>\<Esc>o",
    \ ":\<CR>break;\<UP>\<Esc>o"
    \]
  let i = 0
  for regexp in serchWords
    if line =~ regexp
      return actions[i]
    endif
    let i = i + 1
  endfor
  return ":"
endfunction
au FileType c,cpp,java,javascript inoremap <expr> : GetColonForC()