
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:
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 markdownItalic
do contains=
, isto:
não funciona mais direito:
mesmo que tenha resolvido o outro problema. Também tentei substituir \S
o 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
\S
o itálico nas regexes,[^*]
mas também não funcionou.
Basta copiar $VIMRUNTIME/syntax/markdown.vim
e ~/.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).