|
发表于 2008-6-13 18:14:43
|
显示全部楼层
Post by herberteuler;1861368
这个我看明白了,但是我有些怀疑这是否可能。如果你了解编辑器的语法高亮是如何工作的话,你就能明白:它是通过对缓冲区中的文件作出各种分析,并根据预先设计好的规则来为文本添加属性的方式来工作的。我想 vim(也包括 Emacs)的开发者在设计这些规则的时候不太可能会考虑到你提到的这种情况(因为不可能执行并非一定意味着注释),如果是这样的话,除非你来做一个 hack,就无法使用预定义的方式来实现它。
vim/emacs 的语法高亮是可以自己修改的,他并不真正理解你编辑内容的含义,主要通过正则表达式来分析内容。
5. 定义语法 *:syn-define* *E410*
Vim 理解三种语法项目的类型:
1. 关键字
它只能包含由 'iskeyword' 选项定义的关键字字符,而且不能包含其它语法项目。
它必须匹配完整的单词 (在匹配的前后不能有其它的关键字字符)。
关键词 "if" 只在 "if(a=b)" 里匹配,而不在 "ifdef x" 里匹配。因为 "(" 不是关
键字字符,但 "d" 是。
2. 匹配
它匹配单个正规表达式模式。
3. 区域
它始于 "start" 正规表达式模式的匹配,结束于 "end" 正规表达式模式的匹配。两
者之间可以包含任何文本。其中,"skip" 正规表达式模式可以用来避免 "end" 模式的匹
配。
5. Defining a syntax *:syn-define* *E410*
Vim understands three types of syntax items:
1. Keyword
It can only contain keyword characters, according to the 'iskeyword'
option. It cannot contain other syntax items. It will only match with a
complete word (there are no keyword characters before or after the match).
The keyword "if" would match in "if(a=b)", but not in "ifdef x", because
"(" is not a keyword character and "d" is.
2. Match
This is a match with a single regexp pattern.
3. Region
This starts at a match of the "start" regexp pattern and ends with a match
with the "end" regexp pattern. Any other text can appear in between. A
"skip" regexp pattern can be used to avoid matching the "end" pattern. |
|