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 の設定を追加することで回避することはできます。
もうちょっとスマートな回避方法とかないものか。