読者です 読者をやめる 読者になる 読者になる

lexima.vim と Ruby の組み合わせでハマった

以前、lexima.vim からオムニ補完を呼び出す設定を行ないました。
で、これを元に文字列内では補完しないように

call lexima#add_rule({
\   "char" : '.', "input" : '.', "filetype" : "ruby", "syntax" : "String"
\})

みたいな設定を追加しました。
しかし、この設定だと "|" の時に . を入力するとオムニ補完が呼び出されてしまいました。

原因

いろいろと調べてみたんですがどうやら filetype=ruby では "|" の時の syntax は String ではなくて rubyStringDelimiter という syntax になるため、上記の設定では回避できなかったみたいです。

回避

いろいろと試してみたんですが、結局以下のように雑な対応をするのが無難みたい。

call lexima#add_rule({"at" : '\S\%#', "char" : '.', "input" : '.<C-x><C-o>', "filetype" : "ruby"})
call lexima#add_rule({
\   "at" : '\%#"', "char" : '.', "input" : '.', "filetype" : "ruby", "priority" : 10
\})
call lexima#add_rule({
\   "at" : "\\%#'", "char" : '.', "input" : '.', "filetype" : "ruby", "priority" : 10
\})
call lexima#add_rule({
\   "char" : '.', "input" : '.', "filetype" : "ruby", "syntax" : "String", "priority" : 10
\})

もにょるー。