命令行
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 Script:Test-Path {......}
Function Test-Path {......}
FUNCTION TEST {......}
我在UltraEdit中使用CTAGS时,要跳转时需要选中完整的函数名称,因为UltraEdit认为 - 是隔离符号而非函数名称的一部分
我只是定义了如何搜索function,没定义怎样搜索Variable,因Variable名字重复率高且定义格式又有很多种(主要是人太懒了)。
如果你想Variable的正则,自ctags.cnt中另起一新行写入下面的参数即可
--regex-PowerShell=你写的Variable正则