2

vimscript で次の構文規則を定義しています。

hi MyBold term=bold   gui=bold
hi MyRed  ctermfg=red guifg=#ff0000

そして後で、両方のハイライトを同じキャラクターに適用したいと思います。基本的に、私は次のことを試しました:

syn match MyRed  /\%1c\%1l./
syn match MyBold /\%1c\%1l./

しかし、2 番目の一致が最初の一致を置き換えます。syntax matchそのため、 のヘルプとその質問への回答をさらに読み、syn matchパラメーターをいじってみました。

syn match MyRed  /\%1c\%1l./ contains=CONTAINED
syn match MyBold /\%1c\%1l./ contained

それでもまったく同じように動作します。

では、2 つの構文一致を使用して、同じ文字の背景と前景を個別に変更するにはどうすればよいでしょうか?

4

1 に答える 1

2

できません。各文字について、Vim は、最後の「最も内側の」非透過的な構文グループの一致によって決定される特定のハイライト グループを 1 つだけ使用します。

これを回避するには、組み合わせたハイライト グループと対応する:syntaxコマンドを定義します。

:hi MyBoldRed cterm=bold ctermfg=red gui=bold guifg=#ff0000

一部の構文 (たとえば$VIMRUNTIME/syntax/html.vim、およびさまざまな Wiki 形式) では、太字、イタリック、および下線を組み合わせるために使用されますが、その後は退屈で反復的になります。ただし、Vim は WYSIWYG 向けではないことに注意してください。構文の強調表示は、いくつかのヒントを提供するだけです。

編集:コマンドの修飾子を追加するパッチが提案されています。それは Bram の Todo リストにあります。combine:syntax

于 2013-04-12T14:59:26.743 に答える