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

しばらくこれで様子見。