
Используя Vim 7.4 на Windows в ConEmu (хотя я видел то же самое на других платформах/настройках), я замечаю, что подсветка синтаксиса соответствует начальным и конечным двойным звездочкам как курсивным подобластям внутри жирной области, которую они обозначают. Это бельмо на глазу:
Покопавшись, я, кажется, нашел источник этой проблемы (из $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
в регулярных выражениях курсив, [^*]
но это тоже не сработало. Также, установкаПлагин Markdown от Plastic Boyне исправил.
Есть идеи, как обойти эту досадную проблему?
решение1
Итак, эта базовая концепция работает:
Я также пробовал заменить
\S
курсив в регулярных выражениях,[^*]
но это тоже не сработало.
Просто скопируйте $VIMRUNTIME/syntax/markdown.vim
и ~/.vim/syntax/
измените две syn region markdownItalic...
строки следующим образом:
syn region markdownItalic start="[^* ]\@<=\*\*\@!\|\*\@<!\*[^* ]\@=" end="[^* ]\@<=\*\|\*\@<!\*[^* ]\@=" keepend contains=markdownLineStart
syn region markdownItalic start="[^_ ]\@<=__\@!\|_\@<!_[^_]\@=" end="[^_ ]\@<=_\|_\@<!_[^_]\@=" keepend contains=markdownLineStart
Также, что примечательно, похоже, нынешний Тим Поупvim-уценкане имеет этой проблемы (хотя на момент написания статьи у него были другие проблемы, связанные с курсивом; похоже, эту проблему сложно решить с помощью подсветки синтаксиса Vim).