¿Cómo evitar que la sintaxis de rebajas de Vim se resalte como asteriscos en cursiva utilizados para indicar negrita?

¿Cómo evitar que la sintaxis de rebajas de Vim se resalte como asteriscos en cursiva utilizados para indicar negrita?

Al usar Vim 7.4 en Windows en ConEmu (aunque he visto lo mismo en otras plataformas/configuraciones), noto que el resaltado de sintaxis coincide con los dobles asteriscos inicial y final como subregiones en cursiva dentro de la región en negrita que denotan. Esto es una monstruosidad:

Vim Markdown resalta los asteriscos en cursiva en el área en negrita

Después de investigar, creo que encontré la fuente de este problema (de $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

Y más abajo:

hi def link markdownItalic                htmlItalic
hi def link markdownBold                  htmlBold
hi def link markdownBoldItalic            htmlBoldItalic

Como puede ver, la negrita acepta cursiva como subregión. El problema es que si elimino markdownItalicdel archivo contains=esto:

trabajo en negrita y cursiva

ya no funciona bien:

negrita y cursiva equivocadas

aunque solucionó el otro problema. También intenté sustituir \Slas expresiones regulares por cursiva, [^*]pero tampoco funcionó. Además, instalarComplemento Markdown de Plastic Boyno lo arregló.

¿Alguna idea sobre cómo solucionar este molesto caso?

Respuesta1

Entonces este concepto básico funciona:

También intenté sustituir \Slas expresiones regulares por cursiva, [^*]pero tampoco funcionó.

Simplemente copie $VIMRUNTIME/syntax/markdown.vimy ~/.vim/syntax/cambie las dos syn region markdownItalic...líneas para que sean

syn region markdownItalic start="[^* ]\@<=\*\*\@!\|\*\@<!\*[^* ]\@=" end="[^* ]\@<=\*\|\*\@<!\*[^* ]\@=" keepend contains=markdownLineStart
syn region markdownItalic start="[^_ ]\@<=__\@!\|_\@<!_[^_]\@=" end="[^_ ]\@<=_\|_\@<!_[^_]\@=" keepend contains=markdownLineStart

Además, en particular, parece que la actual campaña de Tim Popereducción de vimno tiene el problema (aunque al momento de escribir este artículo tiene otros relacionados con la cursiva; parece que este es un problema difícil de resolver con el resaltado de sintaxis de Vim).

información relacionada