【问题标题】:VIM custom syntax school of rockvim 自定义语法学派
【发布时间】:2011-12-06 09:16:30
【问题描述】:

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

{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 之间的所有内容,作为一种颜色,然后直到下一个 } 作为第二种颜色。也许括号也应该是另一种颜色。我不擅长正则表达式,但这个论坛可以为我指明正确的方向,最终我希望掌握它们。

【问题讨论】:

    标签: vim guitar


    【解决方案1】:

    这是一个非常简单的版本,它只会突出显示整个 {...} 块。将以下内容放入${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 之类的东西,当然这没什么意义(而且听起来很可怕),但你明白了。

    【讨论】:

    • 我将使用正则表达式,因为我的一些和弦的表示不太通用,但这很好!谢谢!
    • 顺便说一句,在设置这个时我发现了一些 \syntax\chordpro.vim 。 . .但对于我的摇滚文件来说,它可能有点过于复杂了。 . .接下来会检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2013-04-16
    相关资源
    最近更新 更多