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

赤色のケトル

いつか、どこかの誰かの役に立つことを願って記すメモ帳

連続したダブルクォートがあると、うまくシンタックスハイライトされないときの対処法

vim

連続したダブルクォートがあると、うまくシンタックスハイライトされないときの対処法。

症状

vimの画面上で、ソースコードが以下の画像のように表示されてしまう。
f:id:Red_Kettle:20161226165912p:plain
99行目の連続したダブルクォート以降がすべて黄色にハイライトされている。

結論

.vim/after/syntax/fortran.vim を作成し、fortran.vim に以下のように記す。

"ダブルクォートが連続したとき、2つ目を認識するように修正する。
syn region cIncluded start=/"/ skip=/\\\\\|\\"/ end=/"/ contained contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber

これを作っておくと、以下の画像のようにちゃんと表示される。
f:id:Red_Kettle:20161226165928p:plain

原因はなにか

fortran で書かれたコードを vim で開き、:syntax とコマンドするとシンタックスの一覧が表示される。これを見ると、どの構文がどうハイライトされるかを知ることができる。構文ファイルの表記については、以下のリンクを参照のこと。

usr_44 - Vim日本語ドキュメント

このうち、ダブルクォートに関する部分は cIncluded である。デフォルトでは start=/"[^(]/ となっているため、少なくとも1文字、ダブルクォートの後に入る必要があると思われる。よって連続したダブルクォートの2つ目が、この"文字"として認識され end=/"/ に引っかからなくなってしまったと考えられる。

また、デフォルトの設定を上書きしなければならないため、 after/ の下にファイルを作る必要がある。