
ConEmu の Windows で Vim 7.4 を使用すると (他のプラットフォーム/セットアップでも同じ現象が見られましたが)、構文の強調表示が、太字領域内の斜体のサブ領域として、先頭と末尾の二重アスタリスクと一致していることに気づきました。これは目障りです。
いろいろ調べてみた結果、この問題の原因がわかったと思います ( より$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.vim
2行をコピーし~/.vim/syntax/
て次syn region markdownItalic...
のように変更します。
syn region markdownItalic start="[^* ]\@<=\*\*\@!\|\*\@<!\*[^* ]\@=" end="[^* ]\@<=\*\|\*\@<!\*[^* ]\@=" keepend contains=markdownLineStart
syn region markdownItalic start="[^_ ]\@<=__\@!\|_\@<!_[^_]\@=" end="[^_ ]\@<=_\|_\@<!_[^_]\@=" keepend contains=markdownLineStart
また、注目すべきは、ティム・ポープの現在のvim マークダウンこの問題はありません (ただし、この記事の執筆時点では斜体に関連する他の問題があります。これは Vim 構文強調表示では解決が難しい問題のようです)。