rst.vimにcode-block:: ディレクティブを追加

golang-docjpのお手伝いしてるんだけど、vimでreSTをいじっていたら、なんか妙なところで反転してとてもうざいになっていた。原因は2つ。

  1. ファイル中、code literal以外の部分でポインタの説明の '*'がreSTの強調と解釈されていた。これはwarningも出ている。 →全部直した
  2. 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はこういうの直ってるのかもなあとか思った。後で調べてみよう。