2013-07-09 29 views
1

我正在使用vim-clojure-static,一个Clojure插件。我可以做,例如添加自己的函数和宏的语法组: syntax keyword clojureMacro defsystemVim语法:匹配命名空间限定符号

但在Clojure中,一个已经需要从其他的命名空间(进口)代码之后,人们必须命名空间限定函数和宏。例如,如果我需要名称空间my-namespacedefsystem位于my-namespace,那么我将不得不通过ny-namespace/defsystem来引用它。但是,如果需要另一个名称空间,可以缩短(实际重命名)名称空间名称,例如my/defsystem

所以,问题:syntax keyword clojureMacro defsystem不起作用,如果defsystem是命名空间qulified,如my/defsystem。命名空间限定符可以是任何东西。我该如何解决这个问题?正则表达式'\m[a-z.+\-*_!?]\+\/'与命名空间限定符匹配。所以基本上我想要的代码与'\m[a-z.+\-*_!?]\+\/'匹配,紧接着是clojureMacro,突出显示整个事物是clojureMacro。

回答

2

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

在当时,VimClojure提供了所谓的“动态突出显示”。它将检查所需的名称空间(及其别名),并动态地将引用的名称空间的符号添加到突出显示中。所以,如果你输入“m/defsystem”,它会突出显示,但“m/non-existant”或“not-m/defsystem”不会。突出显示确实尊重作为一个宏或函数等。你会不会改名称空间别名从“米”到别的东西,高亮会(几乎)自动适应。但是它需要运行一个后端服务器。

也许你想ping vimclojure google group的家伙。关于vim和clojure。也许有人愿意伸出援助之手,把这个功能作为壁炉的延伸。

+0

嗨kotarak!我假设你对Vim的东西非常好。那么我所问的是不可能的?另外,我在尝试这个时遇到了另一个问题:例如'syntax match clojureMacro'\ m \([az。+ \ - * _ !?] \ + \/\)defsystem''有没有将正则表达式放在一个变量或其他可以评估的东西中,并将其作为参数赋值?像'let nsq ='\ m \([az。+ \ - * _ !?] \ + \/\)\?''然后做'语法匹配clojureMacro eval(nsq。'defsystem')'不行;但可以以某种方式完成? – oskarkv

+1

它可能可以用类似'execute“语法匹配clojureMacro这样的东西来完成。 nsq。 “defsystem”'。然而,未经测试。 – kotarak

+0

啊,是的,执行。谢谢! – oskarkv