Vim语法:匹配命名空间限定符号

时间:2013-07-09 23:00:11

标签: clojure syntax-highlighting vim vim-syntax-highlighting

我正在使用vim-clojure-static,一个Clojure插件。我可以通过以下方式将我自己的函数和宏添加到语法组: syntax keyword clojureMacro defsystem

但是在Clojure中,在从其他名称空间中需要(导入)代码之后,必须使用名称空间来限定函数和宏。例如,如果我要求名称空间my-namespacedefsystem位于my-namespace,我必须通过ny-namespace/defsystem引用它。但是,当需要另一个名称空间时,可以缩短(实际重命名)名称空间名称,例如my/defsystem

所以,问题是:syntax keyword clojureMacro defsystem如果defsystem是命名空间,则my/defsystem不起作用,例如'\m[a-z.+\-*_!?]\+\/'。命名空间限定符可以是任何东西。我该如何解决这个问题?正则表达式'\m[a-z.+\-*_!?]\+\/'匹配名称空间限定符。所以我基本上希望代码匹配{{1}}紧跟一个clojureMacro,然后突出显示好像整个东西都是clojureMacro。

2 个答案:

答案 0 :(得分:2)

它并没有真正回答你的问题,但无论如何。

在VimClojure提供所谓的“动态突出显示”的日子里。它将检查所需的命名空间(及其别名),并将动态添加引用的命名空间的符号到突出显示。因此,如果您输入“m / defsystem”,它将突出显示,但“m / non-existant”或“not-m / defsystem”则不会。突出显示确实是一个宏或功能等。你是否会将名称空间别名从“m”更改为其他内容,突出显示将(几乎)自动适应。但是它需要运行后端服务器。

也许你想对vimclojure google group上的人进行ping操作。这都是关于vim和clojure的。也许有人愿意伸出援助之手并将此功能作为壁炉扩展。

答案 1 :(得分:0)

对于那些仍在寻找解决方案的人来说,我已经重新实现了VimClojure的动态突出显示功能作为fireplace.vim插件:

https://github.com/guns/vim-clojure-highlight