Как отключить выделение синтаксиса разметки Vim курсивом со звездочками, используемыми для обозначения жирного шрифта?

Как отключить выделение синтаксиса разметки Vim курсивом со звездочками, используемыми для обозначения жирного шрифта?

Используя Vim 7.4 на Windows в ConEmu (хотя я видел то же самое на других платформах/настройках), я замечаю, что подсветка синтаксиса соответствует начальным и конечным двойным звездочкам как курсивным подобластям внутри жирной области, которую они обозначают. Это бельмо на глазу:

Vim markdown выделяет звездочки курсивом в жирной области

Покопавшись, я, кажется, нашел источник этой проблемы (из $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).

Связанный контент