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

1

Usando o Vim 7.4 no Windows no ConEmu (embora eu tenha visto a mesma coisa em outras plataformas / configurações), percebo que o destaque da sintaxe corresponde ao início e ao final de asteriscos duplos como sub-regiões itálicas na região em negrito que eles indicam. Esta é uma tristeza:

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

Depois de pesquisar, acho que encontrei a fonte desse 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 itálico como uma sub-região. O problema é se eu remover markdownItalicdo contains=, isto:

trabalho em negrito e itálico

não funciona mais corretamente:

negrito e itálico, enganado

mesmo que tenha corrigido o outro problema. Também estou tentando substituir \Snas regexes por itálico, [^*]mas isso também não funcionou. Além disso, a instalação do plugin Markdown do Plastic Boy não o corrigiu.

Alguma idéia de como contornar esse caso irritante?

Kazark
fonte
Outra coisa que não entendo é por que o começo e o fim estão sendo comparados com a mesma coisa com um ou no meio. Parece-me que um deles tem ou deveria ser para começar e metade para terminar. Mas, novamente, quando você começa regexes este complicadas, torna-se difícil saber o que tudo está acontecendo e por que ...
Kazark
Descobrir alguma solução aqui?
21815 George Mauer

Respostas:

1

Portanto, este conceito básico funciona:

Também estou tentando substituir \Snas regexes por itálico, [^*]mas isso também não funcionou.

Basta copiar $VIMRUNTIME/syntax/markdown.vimpara ~/.vim/syntax/e alterar as duas syn region markdownItalic...linhas para ser

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

Além disso, notavelmente, parece que o atual desdobramento de Tim Pope não tem o problema (embora, neste momento, ele tenha outros relacionados ao itálico; parece que esse é um problema difícil de resolver com o realce da sintaxe do Vim).

Kazark
fonte