我有这个vimscript:
syn region fdocCommand start="^@" end="$" contained
syn region fdocComment start="^@" end="^@tangle " contains=fdocCommand keepend
" syn region fdocComment start="^@" end="^@felix" contains=fdocCommand keepend
但我需要的是由start="^@"
定义的区域,后跟除"tangle"
或"felix"
以外的任何内容,并以"@tangle"
或"@felix"
结束。实际上较弱的形式可以是@tangle
行,也可以是注释掉的@felix
行。
实际使用是一种有文化的编程工具,@commands
类似@h1
标题,@title
等,代码由@felix
或@tangle
引入,以下一个@command
结束。碰巧我的网络服务器可以通过语法高亮和超链接显示它,真正的代码命令集包括@python
,@ocaml
,@c++
等。对于Felix,@..@felix
序列实际上被编译器识别为注释,因此可以直接编译识字代码。
答案 0 :(得分:2)
要仅使@commands
@tangle
的{{1}}区域启动,您需要通过\@!
否定前瞻:
^@\%(tangle\)\@!
。为了确保它只是tangle
,而不是以 tangle
开头的,您需要额外的$
断言;并且不匹配felix
,另一个分支:^@\%(\%(tangle\|felix\)$\)\@!
所以,这应该做:
syn region fdocComment start="^@\%(\%(tangle\|felix\)$\)\@!" end="^@\%(tangle\|felix\)$" contains=fdocCommand keepend