如何阻止Vim降价语法突出显示为用于表示粗体的斜体星号?


1

在ConEmu的Windows上使用Vim 7.4(虽然我在其他平台/设置上看到过相同的东西),我注意到语法高亮显示将开头和结尾双星号作为它们表示的粗体区域内的斜体子区域进行匹配。这是一个眼睛:

Vim markdown highlighting asterisks as italics in bold area

在挖掘之后,我想我已经找到了这个问题的根源(来自 $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=, 这个:

bold and italic working

不再适用:

bold and italic goofed up

即使它解决了另一个问题。我也试着替代 \S 在斜体中用于斜体 [^*] 但那也不起作用。另外,安装 Plastic Boy的Markdown插件 没有解决它。

关于如何解决这个恼人案例的任何想法?


我不明白的另一件事是为什么开始和结束与中间或中间相同。在我看来,一个人或者应该是开始的,一半是结束的。但话说回来,当你得到复杂的正则表达式时,很难知道一切都在发生,为什么......
Kazark

找出任何解决方案?
George Mauer

Answers:


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语法高亮解决的问题)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.