Como impedir que a sintaxe de marcação do Vim seja destacada como asteriscos em itálico usados ​​​​para denotar negrito?

Como impedir que a sintaxe de marcação do Vim seja destacada como asteriscos em itálico usados ​​​​para denotar negrito?

Usando o Vim 7.4 no Windows no ConEmu (embora eu tenha visto a mesma coisa em outras plataformas/configurações), noto que o realce da sintaxe corresponde aos asteriscos duplos inicial e final como sub-regiões em itálico dentro da região em negrito que eles denotam. Isto é uma monstruosidade:

Marcação do Vim destacando asteriscos em itálico na área em negrito

Depois de pesquisar, acho que encontrei a origem deste 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

E mais abaixo:

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

Como você pode ver, o negrito aceita o itálico como sub-região. O problema é que se eu remover markdownItalicdo contains=, isto:

trabalho em negrito e itálico

não funciona mais direito:

negrito e itálico foram enganados

mesmo que tenha resolvido o outro problema. Também tentei substituir \So itálico nas regexes, [^*]mas também não funcionou. Além disso, instalarPlug-in Markdown do Plastic Boynão resolveu.

Alguma idéia de como contornar esse caso chato?

Responder1

Portanto, este conceito básico funciona:

Também tentei substituir \So itálico nas regexes, [^*]mas também não funcionou.

Basta copiar $VIMRUNTIME/syntax/markdown.vime ~/.vim/syntax/alterar as duas syn region markdownItalic...linhas para serem

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

Além disso, notavelmente, parece que o atualmarcação vimnão tem o problema (embora no momento em que este livro foi escrito ele tivesse outros relacionados ao itálico; parece que este é um problema difícil de resolver com o realce de sintaxe do Vim).

informação relacionada