lexima.vim の優先順位でハマった

"" の補完をしようと次のような設定を行ったのですが、うまく動作しなかったので覚書。

" 1." を入力したら "|" と補完される
call lexima#add_rule({"at" : '\%#', "char" : '"', "input_after" : '"'})
" 2.ただし、文字列内で " を入力した場合は補完しない
call lexima#add_rule({"at" : '\%#', "char" : '"', "input" : '"', "syntax" : "String"})
" 3."|" で " を入力したら ""| とする
call lexima#add_rule({"at" : '"\%#"', "char" : '"', "input" : '<Right>'})


"" が文字列として扱われる場合に 3 がうまく動作しませんでした。
これは、lexima.vim の優先順位の問題で、『"syntax" が設定されている設定のほうが優先順位が高い』ためです。 これにより 3 の条件に当てはまる場合でも "syntax" が設定されている 2 の方の優先順位が高いので 3 が動作しないという状況になってしまいます。

解決

あまりスマートな回避方法でないのですが、

" 1." を入力したら "|" と補完される
call lexima#add_rule({"at" : '\%#', "char" : '"', "input_after" : '"'})
" 2.ただし、文字列内で " を入力した場合は補完しない
call lexima#add_rule({"at" : '\%#', "char" : '"', "input" : '"', "syntax" : "String"})
" 3."|" で " を入力したら ""| とする
call lexima#add_rule({"at" : '"\%#"', "char" : '"', "input" : '<Right>'})

" 4.文字列内の場合の設定も追加する
call lexima#add_rule({"at" : '"\%#"', "char" : '"', "input" : '<Right>', "syntax" : "String"})

と、いうように 4 の設定を追加することで回避することはできます。
もうちょっとスマートな回避方法とかないものか。