
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:
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 markdownItalic
del archivo contains=
esto:
ya no funciona bien:
aunque solucionó el otro problema. También intenté sustituir \S
las 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
\S
las expresiones regulares por cursiva,[^*]
pero tampoco funcionó.
Simplemente copie $VIMRUNTIME/syntax/markdown.vim
y ~/.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).