Vimでは以下のように設定すれば対応する括弧や引用符を自動補完してくれる。
inoremap { {}<Left>
inoremap [ []<Left>
inoremap ( ()<Left>
inoremap " ""<Left>
inoremap ' ''<Left>
括弧に関して言えばこれで良いが、引用符("と')の場合は引用を閉じようとしているのに補完されてしまうケースがあり煩わしい。
そこで簡単な関数を用意して、既に対応する引用符が存在する時には補完を行わないようにした。(Vimに空気を読んでもらった)
function! QuotesCompletion(char)
let counter = 0
let line = getline(".")
for i in range(strlen(line))
if line[i] == a:char
let counter += 1
endif
endfor
if counter % 2 == 0
return a:char.a:char."\<Left>"
else
return a:char
end
endfunction
inoremap <silent> <expr> " QuotesCompletion("\"")
inoremap <silent> <expr> ' QuotesCompletion("\'")
現在いる行において引用符が偶数個だったら補完して、奇数個だったら既に対応する引用符があると判断して補完しない。