Вот очень простая версия, которая просто выделит целые блоки {...}
. Поместите в ${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
, что, конечно, не имеет большого смысла (и звучит ужасно), но вы поняли.