Vim マークダウン構文が太字を表すために使用される斜体のアスタリスクとして強調表示されないようにするにはどうすればよいですか?

Vim マークダウン構文が太字を表すために使用される斜体のアスタリスクとして強調表示されないようにするにはどうすればよいですか?

ConEmu の Windows で Vim 7.4 を使用すると (他のプラットフォーム/セットアップでも同じ現象が見られましたが)、構文の強調表示が、太字領域内の斜体のサブ領域として、先頭と末尾の二重アスタリスクと一致していることに気づきました。これは目障りです。

Vim マークダウンで太字部分のアスタリスクを斜体で強調表示する

いろいろ調べてみた結果、この問題の原因がわかったと思います ( より$VIMRUNTIME/syntax/markdown.vim):

syn region markdownItalic start="\S\@<=\*\|\*\S\@=" end="\S\@<=\*\|\*\S\@=" keepend contains=markdownLineStart
syn region markdownItalic start="\S\@<=_\|_\S\@=" end="\S\@<=_\|_\S\@=" keepend contains=markdownLineStart
syn region markdownBold start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart,markdownItalic
syn region markdownBold start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart,markdownItalic
syn region markdownBoldItalic start="\S\@<=\*\*\*\|\*\*\*\S\@=" end="\S\@<=\*\*\*\|\*\*\*\S\@=" keepend contains=markdownLineStart
syn region markdownBoldItalic start="\S\@<=___\|___\S\@=" end="\S\@<=___\|___\S\@=" keepend contains=markdownLineStart

さらに下には:

hi def link markdownItalic                htmlItalic
hi def link markdownBold                  htmlBold
hi def link markdownBoldItalic            htmlBoldItalic

ご覧のとおり、太字は斜体をサブ領域として受け入れます。問題は、markdownItalicから以下を削除するとcontains=次のようになります。

太字と斜体で動作

正しく動作しなくなりました:

太字と斜体が間違っている

他の問題は解決しましたが、\S正規表現で斜体を置き換えてみました[^*]が、これも機能しませんでした。また、インストールするとPlastic Boy の Markdown プラグイン修正しませんでした。

この厄介なケースを回避する方法について何かアイデアはありますか?

答え1

つまり、この基本的な概念は機能します。

\Sまた、正規表現で斜体を置き換えてみることも試みましたが[^*]、それでもうまくいきませんでした。

$VIMRUNTIME/syntax/markdown.vim2行をコピーし~/.vim/syntax/て次syn region markdownItalic...のように変更します。

syn region markdownItalic start="[^* ]\@<=\*\*\@!\|\*\@<!\*[^* ]\@=" end="[^* ]\@<=\*\|\*\@<!\*[^* ]\@=" keepend contains=markdownLineStart
syn region markdownItalic start="[^_ ]\@<=__\@!\|_\@<!_[^_]\@=" end="[^_ ]\@<=_\|_\@<!_[^_]\@=" keepend contains=markdownLineStart

また、注目すべきは、ティム・ポープの現在のvim マークダウンこの問題はありません (ただし、この記事の執筆時点では斜体に関連する他の問題があります。これは Vim 構文強調表示では解決が難しい問題のようです)。

関連情報