clojure 和 ctags,捕捉 def* 形式

clojure and ctags, catching def* forms

所以我不久前从 Gist 中找到了以下片段:

--langdef=Clojure                                                                         
--langmap=Clojure:.clj                                                                    
--langmap=Clojure:+.cljx                                                                  
--langmap=Clojure:+.cljs                                                                  
--regex-clojure=/\([ \t]*create-ns[ \t]+([-[:alnum:]*+!_:\/.?]+)//n,namespace/          
--regex-clojure=/\([ \t]*def[ \t]+([-[:alnum:]*+!_:\/.?]+)//d,definition/               
--regex-clojure=/\([ \t]*defn-?[ \t]+([-[:alnum:]*+!_:\/.?]+)//f,function/              
--regex-clojure=/\([ \t]*defmacro[ \t]+([-[:alnum:]*+!_:\/.?]+)//m,macro/               
--regex-clojure=/\([ \t]*definline[ \t]+([-[:alnum:]*+!_:\/.?]+)//i,inline/             
--regex-clojure=/\([ \t]*defmulti[ \t]+([-[:alnum:]*+!_:\/.?]+)//a,multimethod definitio
--regex-clojure=/\([ \t]*defmethod[ \t]+([-[:alnum:]*+!_:\/.?]+)//b,multimethod instance
--regex-clojure=/\([ \t]*defonce[ \t]+([-[:alnum:]*+!_:\/.?]+)//c,definition (once)/    
--regex-clojure=/\([ \t]*defstruct[ \t]+([-[:alnum:]*+!_:\/.?]+)//s,struct/             
--regex-clojure=/\([ \t]*intern[ \t]+([-[:alnum:]*+!_:\/.?]+)//v,intern/                
--regex-clojure=/\([ \t]*ns[ \t]+([-[:alnum:]*+!_:\/.?]+)//n,namespace/   

但是其他库引入了它们自己的宏,例如 defroutesdefhtml。我正在寻找创建一个选择 def*.

的通配符正则表达式

我尝试在 def 中添加 * 但它不起作用,很明显正则表达式是错误的。通配符 catchall 正则表达式是什么样的?

def* 会匹配 defffffff 这样的东西。在正则表达式中,星号并不意味着 匹配任何内容 。这意味着匹配前一个模式任意次数。在您的例子中,之前的模式是 f。尝试 def[a-z]* 匹配 def 后跟任意小写字母组合。

感谢@broma0 的帮助,我的 .ctags 现在有以下内容:

--langdef=Clojure                                                               
--langmap=Clojure:.clj                                                          
--langmap=Clojure:+.cljx                                                        
--langmap=Clojure:+.cljs                                                        
--regex-clojure=/\([ \t]*create-ns[ \t]+([-[:alnum:]*+!_:\/.?]+)//n,namespace/
--regex-clojure=/\([ \t]*def[a-z]*[ \t]+([-[:alnum:]*+!_:\/.?]+)//s,symbol/   
--regex-clojure=/\([ \t]*intern[ \t]+([-[:alnum:]*+!_:\/.?]+)//v,intern/      
--regex-clojure=/\([ \t]*ns[ \t]+([-[:alnum:]*+!_:\/.?]+)//n,namespace/       

def* 任何东西都会被归类为“符号”