vim-smartinput から lexima.vim に乗り換えた
追記
設定が smartinput のままになってたのを修正
vim-smartinput 使っていたんですが、一部の syntax で設定を無効にするような事ができなかったので試しに lexima.vim を使ったらうまく動作したのでこっちに乗り換えることに。
設定方法は多少違うけど vim-smartinput とだいたい同じなので移行はさほど難しくはなかったです。
以下、現在の設定。
let g:lexima_no_default_rules = 1 call lexima#set_default_rules() function! s:set_lexima(rule) call lexima#add_rule(a:rule) let ignore_rule = a:rule let ignore_rule.syntax = ["String", "Comment"] let ignore_rule.input = ignore_rule.char call lexima#add_rule(ignore_rule) endfunction call s:set_lexima({'at': '\%#', 'char': '[', 'input': '[]<Left>'}) call s:set_lexima({'at': '\%#]', 'char': '[', 'input': '['}) call s:set_lexima({'at': '\[\%#\]', 'char': ']', 'input': '<Right>'}) call s:set_lexima({'at': '\[\%#\]', 'char': '[', 'input': '[]<Left>'}) call s:set_lexima({'at': '\[\%#\]', 'char': '<BS>', 'input': '<BS><Del>'}) for [begin, end] in [['(', ')'], ['{', '}']] let bracket = begin.end call s:set_lexima({'at': '\%#', 'char': begin, 'input': bracket.'<Left>'}) call s:set_lexima({'at': '\%#'.end, 'char': begin, 'input': begin}) call s:set_lexima({'at': begin.'\%#'.end, 'char': end, 'input': '<Right>'}) call s:set_lexima({'at': begin.'\%#'.end, 'char': begin, 'input': bracket.'<Left>'}) call s:set_lexima({'at': begin.'\%#'.end, 'char': '<BS>', 'input': '<BS><Del>'}) endfor
しばらくこれで様子見。