既然已经移除前进路上的绊脚石,是时候开始为我们的Potion插件写下一些有用的代码。 我们将从一些简单的语法高亮开始。
在你的插件的repo中创建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
文件。 你也许或也许不能看到消息,取决于你是否有其他插件在该插件之后输出消息。 如果你执行:message
,你将会看到这个文件的确已经加载了。
注意: 每次我告诉你打开Potion文件,我是想要你在一个新的Vim窗口或进程里打开,而不是在一个分割或tab。 打开一个新的Vim窗口导致Vim为此重新加载你所有的插件,而打开一个分割则不会。
代码文件开头和结尾的那几行是一个惯用法,如果这个缓冲区的语法高亮已经启动了,那就无需重新加载。
在本章的剩下部分,我们将忽略文件开头和结尾的if
和let
防御墙。不要移除那几行,只是眼不见为净而已。
用下面的代码替换掉文件中的占位符echom
:
syntax keyword potionKeyword to times
highlight link potionKeyword Keyword
关闭factorial.pn
并重新打开它。to
和times
被高亮成你的配色方案中的关键字类型了!
这两行展示了Vim中的基本的语法高亮。为了高亮某个语法:
syntax keyword
或相关命令(我们待会会提到),定义一组语法类型。这可以让插件作者决定有意义的语法类型分组,然后链接到通用的高亮组。 这同时也让配色方案创作者决定通用的程序结构,而不需要考虑单独的语言。
除了在我们的玩具程序中用到的,Potion还有其他的关键字,所以让我们修改syntax文件来一并高亮它们。
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的内置函数到我们的高亮文件。 把你的syntax文件修改成这样:
syntax keyword potionKeyword loop times to while
syntax keyword potionKeyword if elsif else
syntax keyword potionKeyword class return
syntax keyword potionFunction print join string
highlight link potionKeyword Keyword
highlight link potionFunction Function
关闭并重新打开factorial.pn
,你将看到内置的Potion函数现在已经高亮了。
它的工作原理就跟关键字高亮一样。我们定义了新的语法类型分组并链接到不同的高亮组。
想一想为什么文件开头的if exists
和结尾的let
是有用的。如果你搞不懂,不要担心。 我也曾就这个问题问过Tim Pope。
浏览:help syn-keyword
。注意提到iskeyword
的部分。
阅读:help iskeyword
.
阅读:help group-name
来了解一些配色方案作者常用的通用高亮组。
查询缓存gdb支持对查询结果的缓存处理,常用于多读少写的查询缓存场景,并支持手动的缓存清理。需要注意的是,查询缓存仅支...
XML Schema documentation 元素 完整 XML Schema 参考手册定义和用法 documentation 元素在 schema 中输入文本注释。该元素必须...
XML Schema redefine 元素 完整 XML Schema 参考手册定义和用法 redefine 元素允许在当前 Schema 中重新定义从外部架构文件中获...
XML Schema 简介 通过本节,你将了解 XMLSchemas 的基础知识。XML Schema 是基于 XML 的 DTD 替代者。XML Schema 可描述 XML 文...
XSLT generate-id() 函数本节讲解了 XSLT 中 generate-id()函数的使用,包括它的语法与参数。 完整的 XSLT 函数参考对象定义和用...