1

いくつかのコード ファイルを圧縮してから、より視覚的に見えるようにいくつかのものをハイライトする必要があります。この構文では、chord の後にコンマが続き、次に拍数を示す数字が続き、すべて中括弧で囲まれています。以下は、あなたが聞いたことのあるクラシック ロックの曲の例です。

{Dm,4}Don't cry, don't {C/D,4}raise your eye
It's {Bb/D,2}on-ly {Am,2} teen-age {Dm,4hold}waste-land

コード名を 1 つの色にし、時間表記を別の色にしたいだけです... 一言で言えば、 { と next の間のすべてを 1 つの色として、次の } までを 2 番目の色として表します。たぶん、ブラケットも別の色にする必要があります。私は正規表現が苦手ですが、このフォーラムは正規表現を最終的に習得するための正しい方向性を示してくれると思います。

4

1 に答える 1

2

{...}これは、ブロック全体を強調表示するだけの非常に単純なバージョンです。に以下を入れます${HOME}/.vim/syntax/rock.vim

if exists("b:current_syntax")
    finish
endif

syntax match rockNotation      "{[^}]*}"

highlight link rockNotation    String

そして、次の${HOME}/.vim/ftdetect/rock.vim:

autocmd BufRead,BufNewFile *.rock set filetype=rock

これで、ファイルを開くたび.rockにコードが強調表示されます。(検出が機能しない場合は、:set filetype=rock手動で設定してみて、何かが変わるかどうかを確認してください。) Vim からこれらのファイルを編集した場合は、効果を適用するために再起動する必要がある場合があることに注意してください。

これは長いバージョンで、コードと時間表示が異なる色で強調表示されています。

if exists("b:current_syntax")
    finish
endif

syntax clear
syntax case match

setlocal iskeyword+=#                                                                         
setlocal iskeyword+=-
setlocal iskeyword+=+

syntax match rockChord /\<[A-G]\(b\|#\)\=\(m\|-\|dim\|+\|aug\|7\|m7\|Maj7\|m7b5\)\=\(\/[A-G]\(b\|#\)\=\)\=\>/ contained
syntax match rockDuration /[1-9][0-9]*\(hold\|mute\)\=/ contained

syntax region rockAnnotRegion start=/{/ end=/}/ contains=rockChord,rockDuration

highlight link rockChord          Type
highlight link rockDuration       Constant
highlight link rockAnnotRegion    Delimiter

ご覧のとおり、和音の正規表現は少しワイルドになりました。のようなものをサポートしますがA#m7b5/Db、これはもちろんほとんど意味がありません (そして恐ろしいことに聞こえます) が、アイデアは理解できます。

于 2011-10-12T19:15:56.073 に答える