CTAGS解析PowerShell文件

来源:互联网 发布:java用正则表达式 编辑:程序博客网 时间:2024/04/30 14:04

命令行

ctags.exe --options=ctags.cnf -L *

ctags.cnf内容(此文件编写最好是UTF-8或ASCII的,因为ctags.exe有时会因为编码问题不能正确读入此文件)

--langdef=PowerShell--langmap=PowerShell:.psm1.ps1--regex-PowerShell=/^[\t ]*function[\t ]*([a-v]{5,7}:)?([a-z_-]+)/\2/m, method/i-f ctags.txt

正则稍微说一下吧:

([a-v]{5,7}:)? 为匹配Scope,如private, local, global, script([a-z_-]+)     为匹配函数名称,因没有在函数中使用数字的习惯,所以没有添加带有数字的模式,如果要带数字,则用([a-z0-9_-]+)\2             让CTAGS把第二个括号所匹配的内容当作函数名来记录,如果改为\1后,当函数声明带有Scope时,CTAGS认为函数名为Scope,即把"private:", "local:", "scripts:"等等当作函数名称来记录/i             代表忽略大小写


这个文件名(ctags.cnf)可以随便定义,不过默认ctags.exe会自动在当前路径或环境变量%CTAGS%(如果存在的话)中加载ctags.cnf这个文件,所以如果你用的此文件保存命令,在命令行可以这样写

ctags.exe -L*
哦,对了,使用文件定义命令时,-f <target name> 一定要写在文件里,在命令行中添加这个命令是无效的,会被ctags.exe认为二次定义而报错,从而使用ctags为默认输出文件
如果没用文件来定义命令,在命令行写入时,正则一定要用引号引起来,因为正则中带有空格,会被ctags.exe认为是分隔符


此定义可以匹配的function格式:

function Script:Test-Path {......}Function Test-Path {......}    FUNCTION TEST {......}

我在UltraEdit中使用CTAGS时,要跳转时需要选中完整的函数名称,因为UltraEdit认为是隔离符号而非函数名称的一部分


我只是定义了如何搜索function,没定义怎样搜索Variable,因Variable名字重复率高且定义格式又有很多种(主要是人太懒了)。

如果你想Variable的正则,自ctags.cnt中另起一新行写入下面的参数即可

--regex-PowerShell=你写的Variable正则