1

我尝试压缩一些和弦文件,然后需要突出显示一些东西,这样它就更直观了。这种语法是和弦后跟一个逗号,然后是一个显示多少节拍的数字,并且全部用大括号括起来。以下是您可能听过的经典摇滚歌曲的示例:

{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

我只是想让和弦名称为一种颜色,而时间符号为另一种颜色……简而言之,就是 { 和 next 之间的所有内容,作为一种颜色,然后直到下一个 } 作为第二种颜色。也许括号也应该是另一种颜色。我不擅长正则表达式,但这个论坛可以为我指明正确的方向,最终我希望掌握它们。

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 回答