3

と。の単純なテキストマークアップ言語を考えてみましょ_underscores denote italics_*astrisks denote bold*

架空のvim構文ファイルでは、

syntax region italic start='_' end='_' keepend
syntax region bold start='*' end='*' keepend
highlight italic cterm=italic
highlight bold cterm=bold

(はい、私はそれがそうであることを知っています、私は明確にするため\*にそれを残しました。)*

ここでの問題はです_strings like *this*_。端末がitalicBoldフォントをサポートしている場合でも、vimでは一度に1つしか取得できません。

私が本当にやりたいのはこれです:

highlight italic cterm+=italic
highlight bold cterm+=bold

(わかりやすくするためtermguiterm省略されています。)

両方が設定された包含領域italicBoldと領域でこれを回避することは可能ですが、含める場合は厄介になり、赤い領域と青い領域があり、最終的にはすべてが手に負えなくなります。boldItaliccterm=bold,italicunderline

syntax region red ... contains=italicRed,boldRed,underlineRed
syntax region italicRed ... contains=italicBoldRed,italicUnderlineRed
syntax region italicBoldRed ... contains=italicBoldUnderlineRed
.
.
.

highlight red ctermfg=red
highlight italicRed cterm=italic ctermfg=red
highlight italicBoldRed cterm=italic,bold ctermfg=red
.
.
.

adinifinitum。

そして、キッカーは、色をにハードコーディングしたくないということですred。私はしたい

highlight link red Statement

次にitalicRed、と同じハイライト定義を使用しますredが、斜体の設定を追加します。

これを行うためのより簡単な方法が必要です助言がありますか?

4

1 に答える 1

0

いいえ。これまでに見たすべての構文プラグインは、あなたが説明した回避策を使用しています。

Vim にもっと良いものを提供しないのはなぜですか? (私はかつて、色を重ねる可能性を望んでいました。つまり、明るい黄色の背景が明るい灰色の上にある場合、暗い黄色になります。) 高色端末と低色端末と GUI では、これを実装するのは困難です (挑戦が好きな人はいますか?)、構文の強調表示は、いくつかの一般的なプログラミング構造 (コメント、ステートメント、識別子など) に対して何よりもまず重要であり、あなたが考えている精巧なマークアップではありません。

于 2012-11-30T08:31:01.777 に答える