Vim C言語系の構文を持つプログラム言語用にVimを最適化する
動作
1.;が押された時に;+改行 ※文字列,文字,コメント中では改行しない
2.if文やfor文の(){}を以下のように補完する
if;と入力すると ↓ if ( ←ここにカーソル ) { }
.vimrc
"if, else, else-if, switch, for, while, do-while文の入力補助 function AutoEndForC() let line = strpart(getline('.'), 0, col('.')) "if, else, else-if, switch, for, while, do let serchWords = [ \ '^\t*if$', \ '^\t*} \=else$', \ '^\t*} \=else if$', \ '^\t*switch$', \ '^\t*for$', \ '^\t*while$', \ '^\t*do$' \ ] let endsStatements = [ \ "\ ( ) {\n}\<Esc>0b4\<LEFT>a", \ "\ {\n}\<Esc>0b", \ "\ ( ) {\n}\<Esc>0b4\<LEFT>a", \ "\ ( ) {\n}\<Esc>0b4\<LEFT>a", \ "\ ( ) {\n}\<Esc>0b4\<LEFT>a", \ "\ ( ) {\n}\<Esc>0b4\<LEFT>a", \ "\ {\n} while( );\<Esc>3\<LEFT>a" \] let i = 0 for regexp in serchWords if line =~ regexp return endsStatements[i] endif let i = i + 1 endfor return "NF" endfunction "セミコロンが押されたとき一緒に改行する。 function AutoSemicolonEnterForC() let line = strpart(getline('.'), 0, col('.') - 1) if line =~ '^\t*for \=(' "for文を記述中 return ";" else let words = [ \ "cString", \ "cCppString", \ "cCharacter", \ "cComment", \ "cCommentStart", \ "cCommentL", \ "javaString", \ "javaCharacter", \ "javaComment", \ "javaLineComment", \ "javaScriptStringD", \ "javaScriptStringS", \ "javaScriptComment", \ "javaScriptLineComment" \ ] let s = synIDattr(synID(line("."),col("."),0),"name") for word in words if s == word return ";" endif endfor return ";\<CR>" endif endfunction function GetSemicolonForC() "自動的に(){}を付与する let result = AutoEndForC() if result == "NF" ";+改行 or ; return AutoSemicolonEnterForC() endif return result endfunction au FileType c,cpp,java,javascript inoremap <expr> ; GetSemicolonForC()