lexima.vim で ignore を設定できるようなヘルパ関数を書いてみた
lexima.vim で特定の条件で補完をしてほしくない場合は次のように設定する必要があります。
" (| を入力した時に () の補完を行う call lexima#add_rule({'char': '(', 'input_after': ')'}) " ただし、以下の場合は補完しない " |) の場合は補完しない call lexima#add_rule({'char': '(', 'input': '(', 'at': '\%#)'}) " コメント内では補完しない call lexima#add_rule({'char': '(', 'input': '(', 'syntax' : 'Comment'}) " 文字列内では補完しない call lexima#add_rule({'char': '(', 'input': '(', 'syntax' : 'String'})
上記のような設定では重複する部分がいくつか出てきます。
と、いうことで上記のように『特定の場合に設定を無視する』ようなことを簡単にできるヘルパ関数を書いてみました。
function! s:as_list(a) return type(a:a) == type([]) ? a:a : [a:a] endfunction function! s:add_ignore_rule(rule) let rule = copy(a:rule) let rule.input = rule.char let rule.input_after = "" call lexima#add_rule(rule) endfunction function! s:add_rule(rule, ...) call lexima#add_rule(a:rule) if a:0 == 0 return endif for ignore in s:as_list(a:1) call s:add_ignore_rule(extend(copy(a:rule), ignore)) endfor endfunction " 第二引数に無視する条件の rule を渡す call s:add_rule({'char': '(', 'input_after': ')'},[ \ {'at': '\%#)'}, \ {'syntax' : 'Comment'}, \ {'syntax' : 'String'}, \])
使い方は s:add_rule()
の第二引数に『無視する条件の rule』をリストで渡すことができます。
これでだいぶ設定がすっきりとしました。