rst.vimにcode-block:: ディレクティブを追加
今golang-docjpのお手伝いしてるんだけど、vimでreSTをいじっていたら、なんか妙なところで反転してとてもうざいになっていた。原因は2つ。
- ファイル中、code literal以外の部分でポインタの説明の '*'がreSTの強調と解釈されていた。これはwarningも出ている。 →全部直した
- golang-docjpではコードリテラルを単なる :: ではなくディレクティブで明示的に .. code-block:: cpp としているのだけれど、これが vim 的には rstExDirectiveリージョンに見えてしまうらしい。結果としてNoSpellが指示されずに反転表示していた。これは純粋にrst.vimの問題。
1.は単純に \でエスケープすればオッケ。2.がめんどそう。なんだけど、とりあえず以前に syntaxいじっていたのでquick-hackで直した。本当は全部やるべきなんだろうなあ・・・
*** rst.vim.orig 2009-11-19 13:26:24.000000000 +0900 --- rst.vim 2009-11-19 13:27:49.000000000 +0900 *************** *** 47,53 **** syn match rstSimpleTableLines contained display \ '^\%(\s*\)\@>\%(\%(-\+\)\@>\%(\s\+\)\@>\)\%(\%(\%(-\+\)\@>\%(\s*\)\@>\)\+\)\@>$' ! syn cluster rstDirectives contains=rstFootnote,rstCitation, \ rstHyperlinkTarget,rstExDirective syn match rstExplicitMarkup '^\.\.\_s' --- 47,53 ---- syn match rstSimpleTableLines contained display \ '^\%(\s*\)\@>\%(\%(-\+\)\@>\%(\s\+\)\@>\)\%(\%(\%(-\+\)\@>\%(\s*\)\@>\)\+\)\@>$' ! syn cluster rstDirectives contains=rstFootnote,rstCitation,rstCodeBlock, \ rstHyperlinkTarget,rstExDirective syn match rstExplicitMarkup '^\.\.\_s' *************** *** 85,90 **** --- 85,96 ---- \ ' skip=+^$+' . \ ' end=+^\s\@!+ contains=@rstCruft' + execute 'syn region rstCodeBlock contained matchgroup=rstDirective' . + \ ' start=+code-block::\s+' . + \ ' skip=+^$+' . + \ ' end=+^\s\@!+ contains=@NoSpell' + + execute 'syn match rstSubstitutionDefinition contained' . \ ' /|' . s:ReferenceName . '|\_s\+/ nextgroup=@rstDirectives' *************** *** 147,152 **** --- 153,159 ---- "hi def link rstSections Type "hi def link rstTransition Type hi def link rstLiteralBlock String + hi def link rstCodeBlock String hi def link rstQuotedLiteralBlock String hi def link rstDoctestBlock PreProc hi def link rstTableLines rstDelimiter
まあとりあえず、ということで。ひょっとしたら最新版のrst.vimはこういうの直ってるのかもなあとか思った。後で調べてみよう。