vimscript语法不是模式

时间:2015-05-25 22:13:36

标签: vim vim-syntax-highlighting

我有这个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序列实际上被编译器识别为注释,因此可以直接编译识字代码。

1 个答案:

答案 0 :(得分:2)

要仅使@commands @tangle的{​​{1}}区域启动,您需要通过\@! 否定前瞻^@\%(tangle\)\@!。为了确保它只是tangle,而不是以 tangle开头的,您需要额外的$断言;并且不匹配felix,另一个分支:^@\%(\%(tangle\|felix\)$\)\@!

所以,这应该做:

syn region      fdocComment     start="^@\%(\%(tangle\|felix\)$\)\@!" end="^@\%(tangle\|felix\)$" contains=fdocCommand keepend