我需要添加对我正在使用的汇编语言的支持(它不是vim支持的x86,68K或8051)。我查看了现有的语法文件,这是我的问题
1)何时使用syn keyword
和syn match
真的有意义?我的理解是后者支持正则表达式并提供更大的灵活性。另一方面,查看/usr/share/vim/vim70/syntax/asmh8300.vim
- 他们在keyword
和match
中定义操作码,它真正带来了什么好处?
2)我的Asm中的说明有一个共同的格式:
INSTR OP1, OP2 ..;
即空格从操作数界定指令名称。
我认为为此我只能在'关键字'中定义所有Asm命令,因为空格符号默认位于'iskeyword'
。我是对的吗?
3)Asm还支持C风格的结构,枚举和注释。我可以从c.vim中借用它的语法定义,否则它将无法工作并需要进行一些调整?
答案 0 :(得分:3)
如果您拥有一组有限的标识符,并且它们都只包含关键字字符,则:syn keyword
是最佳选择。你是对的,因为:syn match
提供了功能的超集。从本质上讲,
:syn keyword myGroup foobar
相当于
:syn match myGroup "\<foobar\>"
您引用的syntax/asmh8300.vim
语法来自2002,它可能不是如何编写语法文件的最佳示例。 (例如,它在其匹配项周围省略了\<...\>
,对我来说看起来像是一个错误。它仍然具有Vim 5/6的兼容性东西,不再需要了。)
另外,你真的使用Vim 7.0吗?! Vim 7.0是从2007年开始的,非常已过时。应该可以安装最新版本7.3;如果找不到适合您的发行版的软件包(对于Windows,请检查Cream project中的二进制文件,对compile(例如来自Mercurial源)的Linux也不是很困难。
如果您的语法中嵌入了其他语法,并且明确分隔(例如HTML中的JavaScript),则可以:syn include
。但是如果只有类似的结构,最好将它们复制并粘贴到语法中(并至少调整组名)。您也需要小心捕获所有包含的语法组;与语法集群一起,层次结构可能非常复杂!
编写语法时,通常需要找出导致突出显示的语法组。 :syn list
显示所有活动组,但在安装SyntaxAttr.vim - Show syntax highlighting attributes of character under cursor插件时更容易。