2015-05-25 14 views
0

我有這樣的Vimscript: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 

,但我需要的是通過限定的區域:其次是任何東西,除了"tangle""felix"和任何"@tangle""@felix"結束start="^@"。疲軟的形式,實際上做的,無論是@tangle線之上或註釋掉@felix線。

實際使用是一個有文化的編程工具,@commands@h1標題,@title等,以及代碼由@felix@tangle介紹,結束在下次@command。正好我的網絡服務器能與語法高亮和超鏈接,而真正集代碼的命令顯示這種包括@python@ocaml@c++等。費利克斯的@[email protected]序列實際上是由編譯器爲註釋認可,所以有文化代碼直接編譯。

回答

2

只與@commands不在@tangle開始一個區域,你需要負先行通過\@!^@\%(tangle\)\@!。爲了確保它真的只有tangle,不是開始tangle,你需要一個額外的$斷言;並且不匹配felix,太,另一個分支:^@\%(\%(tangle\|felix\)$\)\@!

所以,這應該這樣做:

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

謝謝!這似乎工作:SYN區域fdocComment開始= 「!^ @ \%(\%(糾結\ |菲利克斯\)\)\ @」 end =「^ @ \%(tangle \ | felix \)」contains = fdocCommand keepend。 – Yttrill