我尝试创建笔记的语法定义。
以下是一个例子:
=Title of the note (it's the very first line)
@context (mandatory)
!action (mandatory)
#tag-1 (optional)
#tag-2 (optional)
#tag-n (optional)
>attached-files (optional)
My note come after the first blank line
and continue until the end of the file...
No matter any additional empty line
我想创建语法以突出显示这些不同的匹配。在我的笔记中,我可以编写看起来像标题(=这种方式)或标签(#his-way)的行,并且不必突出显示它们。我尝试为我的笔记元数据创建一个区域,从第一行到第一个空行。
我尝试了这个但是我遇到了问题(突出显示似乎很好但是如果我删除空行后的所有行(包括空行)那么它就不再起作用了......
augroup gtd
autocmd!
autocmd BufRead,BufNewFile *.gtd set filetype=gtd
autocmd FileType gtd syntax region gtdTags start="\%1l" end="^\s*$" fold transparent contains=gtdTitle,gtdContext,gtdStatus,gtdHashtags,gtdAttachedFiles
autocmd FileType gtd syntax match gtdTitle '^=.*' contained
autocmd FileType gtd syntax match gtdContext '^@\S\+$' contained
autocmd FileType gtd syntax match gtdStatus '^!\S\+$' contained
autocmd FileType gtd syntax match gtdHashtags '^#\S\+$' contained
autocmd FileType gtd syntax match gtdAttachedFiles '^>attached-files$' contained
autocmd FileType gtd syntax match gtdSubtitle '^\s*\*\* .*'
autocmd FileType gtd syntax keyword gtdTodo TODO WAITING SOMEDAY SCHEDULED
autocmd FileType gtd highlight gtdTitle guifg=white guibg=NONE gui=bold
autocmd FileType gtd highlight gtdContext guifg=yellow
autocmd FileType gtd highlight gtdStatus guifg=red gui=NONE
autocmd FileType gtd highlight gtdHashtags guifg=grey gui=italic
autocmd FileType gtd highlight gtdAttachedFiles guifg=red guibg=white gui=bold
autocmd FileType gtd highlight gtdSubtitle guifg=black guibg=lightgrey gui=bold
autocmd FileType gtd highlight gtdTodo guifg=white guibg=red gui=NONE
augroup END
如何停止第一个空/空白行或文件末尾的区域,关于第一个来的?
答案 0 :(得分:2)
您可以在区域结尾的模式中包含表示文件末尾的特殊原子:end="^\s*$\|\@$"
;但是,这不是必要的。当start
模式匹配时,Vim 始终启动语法区域;它没有检查end
模式,因为:help syn-region
解释了:
注意:启动区域的决定仅基于匹配的开始 图案。没有检查匹配的结束模式。
因此,即使没有end
模式的匹配,所有区域都隐式地在缓冲区的末尾结束。事实上,你的语法对我很有用。
我认为您已经感到困惑,因为您没有定义正确的语法脚本,而是选择了autocmd FileType gtd
前缀。此外,syntax clear
缺失。
将:syntax
个命令放入~/.vim/syntax/gtd.vim
中的单独文件中,并遵循:help 44.12
中描述的格式。您还可以查看Vim附带的$VIMRUNTIME/syntax/*.vim
中的各种语法脚本之一。