Wie kann man verhindern, dass die Vim-Markdown-Syntax als kursive Sternchen hervorgehoben wird, die zur Kennzeichnung von Fettschrift verwendet werden?

Wie kann man verhindern, dass die Vim-Markdown-Syntax als kursive Sternchen hervorgehoben wird, die zur Kennzeichnung von Fettschrift verwendet werden?

Wenn ich Vim 7.4 unter Windows in ConEmu verwende (obwohl ich dasselbe auf anderen Plattformen/Setups gesehen habe), stelle ich fest, dass die Syntaxhervorhebung die Anfangs- und End-Doppelsternchen als kursive Unterbereiche innerhalb des fettgedruckten Bereichs anpasst, den sie kennzeichnen. Das ist ein Schandfleck:

Vim Markdown hebt Sternchen als Kursivschrift im fettgedruckten Bereich hervor

Nachdem ich herumgestöbert habe, glaube ich, die Ursache dieses Problems gefunden zu haben (von $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

Und weiter unten:

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

Wie Sie sehen, akzeptiert die Fettschrift Kursivschrift als Unterbereich. Das Problem ist, wenn ich Folgendes markdownItalicdaraus entferne contains=:

Fett- und Kursivschrift

funktioniert nicht mehr richtig:

Fett und Kursiv verpatzt

obwohl es das andere Problem behoben hat. Ich habe auch versucht, \Sdie regulären Ausdrücke durch kursiv zu ersetzen, [^*]aber das hat auch nicht funktioniert. Außerdem installiert manMarkdown-Plugin von Plastic Boyhat es nicht behoben.

Irgendwelche Ideen, wie man diesen lästigen Fall umgehen kann?

Antwort1

Dieses Grundkonzept funktioniert also:

Ich habe auch versucht, \Sdie regulären Ausdrücke durch „Kursivschrift“ zu ersetzen [^*], aber das hat auch nicht funktioniert.

Kopieren Sie einfach die beiden Zeilen und ändern Sie sie $VIMRUNTIME/syntax/markdown.vimin~/.vim/syntax/syn region markdownItalic...

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

Außerdem scheint es bemerkenswert, dass Tim Popes aktuellevim-markdownhat dieses Problem nicht (obwohl es zum Zeitpunkt des Schreibens dieses Artikels andere Probleme im Zusammenhang mit Kursivschrift gibt; es scheint, dass dies ein schwieriges Problem ist, das mit der Syntaxhervorhebung von Vim zu lösen ist).

verwandte Informationen