现在我们已经搞定了基本的东西了,现在是时候来给我们的Potion插件写一些有用的代码了。我们先从一些简单的语法高亮开始。
在你的插件目录里创建syntax/potion.vim文件。把下面的代码放进去:
if exists("b:current_syntax")
finish
endif
echom "Our syntax highlighting code will go here."
let b:current_syntax = "potion"
关闭Vim,然后用它打开你的factorial.pn文件。什么都没有发生,但是,如果你运行:messages,你会看到这个文件确实是被加载了的。
注意:当我让你打开Potion文件的时候,我的意思是让你在一个新的Vim窗口或者是实例里打开,而不是在一个新的split或者tab下打开。因为用Vim窗口打开的话,会让Vim重新加载所有和那个窗口有关的文件,但是用spilt打开的话就不会了。
第一行和最后一行是用来防止重复加载语法高亮配置的习惯用法。
在后面的代码里我们会忽略文件开头的和结尾的if和let这样的模板。但是不要删除这些文本行,忘记它们就可以了。
把echom的代码换成下面的代码:
syantax keyword potionKeyword to times
highlight link potionKeyword Keyword
关闭factorial.pn文件,然后再打开它。to和time就会在你的颜色主题里被作为关键字进行高亮了。
上面的两行代码展示了Vim里基本的语法高亮的机构。为了高亮一片语法:
这样就是得插件的作者,按照他们自己的理解来定义语法块,然后来把它和常见的高亮显示组进行管理。它也允许主题创建者为一组编程语言的结构设计颜色,但是无须了解具体的编程语言。
Potion还有很多其他的关键词,我们还没有用到过,所以我们也要把它们加进来,进行高亮显示:
syntax keyword potionKeyword loop times to while
syntax keyword potionKeyword if elsif else
syntax keyword potionKeyword class return
highlight link potionKeyword Keyword
首先,最后一行是不用变的。我们还是让vim把potionKeyword这个组里的所有文本当作Keyword来进行高亮显示。
现在我们有三行命令,都是以syntax keyword potionKeyword开始的。这个向我们展示了多次运行这个命令是不会重置语法组的——它会把它添加进去!这样你就可以逐个地添加语法组了。
具体怎么定义语法组完全取决于你自己:
另外一个Vim的高亮显示组是Function。我们来给高亮脚本加上对Potion的一些内置函数的出力。修改syantax文件如下所示:
syntax keyword potionKeyword loop times to while
syntax keyword potionKeyword if elsif else
syntax keyword potionKeyword class return
syatax keyword potionFunction print join string
highlight link potionKeyword Keyword
highlight link potionFunction Function
关闭再打开factorial.pn文件,你会看到potion的内置函数都会被高亮显示的。
这个和关键词高亮的原理是一样的。我们定义了一个新的语法组,然后把它连接到一个不同的高亮组。