我尝试压缩一些和弦文件,然后需要突出显示一些内容,以便更直观。这个语法是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
我只是想让和弦命名为一种颜色,时间符号为另一种颜色......简而言之,{和下一个之间的所有内容,作为一种颜色然后直到下一个}作为第二种颜色。也许括号应该是另一种颜色。我很喜欢正则表达式,但这个论坛可以指出我正确的方向,最终掌握它们我希望。
答案 0 :(得分: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
这样的东西,这当然没什么意义(听起来很可怕),但你明白了。