1

Используя 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 в регулярных выражениях курсивом [^*] но это тоже не сработало. Кроме того, установка плагина Plastic Boy's Markdown не помогла.

Любые идеи о том, как обойти это раздражающее дело?

1 ответ1

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).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .