如何阻止 Vim markdown 语法以斜体星号突出显示以表示粗体?

如何阻止 Vim markdown 语法以斜体星号突出显示以表示粗体?

在 Windows 上的 ConEmu 中使用 Vim 7.4(尽管我在其他平台/设置上也看到过同样的情况),我注意到语法高亮将开头和结尾的双星号匹配为它们所表示的粗体区域内的斜体子区域。这很碍眼:

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 的 Markdown 插件没有修复它。

关于如何解决这个恼人的情况,您有什么想法吗?

答案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-markdown没有问题(尽管在撰写本文时,它还有其他与斜体相关的问题;这似乎是用 Vim 语法高亮难以解决的一个问题)。

相关内容