vimscript 语法不是模式
vimscript syntax not pattern
我有这个 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
或[=16=引入] 并以下一个 @command
结束。碰巧我的网络服务器可以通过语法突出显示和超链接显示它,真正的代码命令集包括 @python
、@ocaml
、@c++
等。对于 Felix,@..@felix
sequence实际上被编译器识别为注释,所以识字代码可以直接编译。
要仅使用 @commands
而不是 @tangle
的区域开始,您需要通过 \@!
negative lookahead:
^@\%(tangle\)\@!
。要确保它真的只是 tangle
,而不是 以 tangle
开头的东西,您需要一个额外的 $
断言;并且不匹配 felix
,另一个分支:^@\%(\%(tangle\|felix\)$\)\@!
所以,应该这样做:
syn region fdocComment start="^@\%(\%(tangle\|felix\)$\)\@!" end="^@\%(tangle\|felix\)$" contains=fdocCommand keepend
我有这个 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
或[=16=引入] 并以下一个 @command
结束。碰巧我的网络服务器可以通过语法突出显示和超链接显示它,真正的代码命令集包括 @python
、@ocaml
、@c++
等。对于 Felix,@..@felix
sequence实际上被编译器识别为注释,所以识字代码可以直接编译。
要仅使用 @commands
而不是 @tangle
的区域开始,您需要通过 \@!
negative lookahead:
^@\%(tangle\)\@!
。要确保它真的只是 tangle
,而不是 以 tangle
开头的东西,您需要一个额外的 $
断言;并且不匹配 felix
,另一个分支:^@\%(\%(tangle\|felix\)$\)\@!
所以,应该这样做:
syn region fdocComment start="^@\%(\%(tangle\|felix\)$\)\@!" end="^@\%(tangle\|felix\)$" contains=fdocCommand keepend