Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用丰富的CTAG为VB.NET文件创建标记?_Vb.net_Vim_Ctags_Exuberant Ctags - Fatal编程技术网

如何使用丰富的CTAG为VB.NET文件创建标记?

如何使用丰富的CTAG为VB.NET文件创建标记?,vb.net,vim,ctags,exuberant-ctags,Vb.net,Vim,Ctags,Exuberant Ctags,我们在工作中使用.NET,我们的项目有点混合,有一些VB和C。丰富的CTAG生成C#标记,对我来说很好。然而,我还没有弄清楚如何让它为我的VB.NET代码生成标记。我发现唯一有帮助的文章是。但在2003年,它的排名只有几年。我注意到的第一件事是这句话: --langmap=vb:.bas.cls.ctl.frm.vbs 是错的,也是老的。我改为: --langmap=vb:.vb 这稍微改善了我的结果,但它似乎仍然没有生成预期的行为(例如,当我对函数调用或参数设置tag=tags和do^]或

我们在工作中使用.NET,我们的项目有点混合,有一些VB和C。丰富的CTAG生成C#标记,对我来说很好。然而,我还没有弄清楚如何让它为我的VB.NET代码生成标记。我发现唯一有帮助的文章是。但在2003年,它的排名只有几年。我注意到的第一件事是这句话:

--langmap=vb:.bas.cls.ctl.frm.vbs
是错的,也是老的。我改为:

--langmap=vb:.vb
这稍微改善了我的结果,但它似乎仍然没有生成预期的行为(例如,当我对函数调用或参数设置tag=tags和do^]或g]时,它没有标记)

这就是我的
ctags.cnf
文件的样子(我已经验证了它正在被使用):

你知道我需要做什么才能得到适当的支持吗

编辑: 这是我的标签文件中的剪报:

!_TAG_FILE_FORMAT   2   /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED   1   /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME  Exuberant Ctags //
!_TAG_PROGRAM_URL   http://ctags.sourceforge.net    /official site/
!_TAG_PROGRAM_VERSION   5.8 //
Application.Designer.vb .\My Project\Application.Designer.vb    1;" kind:F  line:1
Application.Designer.vb .\Nuts\My Project\Application.Designer.vb   1;" kind:F  line:1
AssemblyInfo.vb .\My Project\AssemblyInfo.vb    1;" kind:F  line:1
AssemblyInfo.vb .\Nuts\My Project\AssemblyInfo.vb   1;" kind:F  line:1
AttachmentHandler.vb    .\Utilities\AttachmentHandler.vb    1;" kind:F  line:1
而我的CS代码库生成如下标记:

SomeModel   .\Client\Views\Models\Namespace\SomeModel.cs    /^    public class SomeModel$/;"    kind:c  line:12 namespace:Views.Models.SomeModel    access:public

除非遵循零缩进编码约定,否则正则表达式将无法工作;)

尝试:


这是一个工作配置,从我的
~/.ctags
中提取,基于OP的配置,并应用接受的答案编辑

我必须删除标签匹配器,因为这会阻止所有子/函数匹配(不确定为什么),并将
(Public | Private |\b)
替换为
(Public | Private)
,以使其选择性地匹配访问修饰符(否则,没有这些修饰符,它就无法匹配任何访问修饰符)


您是否更新了vimrc以让其了解新语言?您使用什么命令来生成
标记
文件?你有错误吗?
标记
文件是否为空?是否正确填充?@romainl,它不是空的,但似乎没有正确填充。我的ctags.cnf文件位于项目的基本目录中,如果我正确读取
man
页面,它会自动使用该文件(如果存在)。当我运行
ctags--options=ctags.cnf
时,它给了我一个关于vb已经存在的语言的警告。@embedded.kyle它看起来像是专门的标记列表插件,而不是内置的标记行为。但是我已经使用了那个插件,所以那个链接应该非常有用。
ctags.cnf
不应该在你的
$HOME
目录中吗?
SomeModel   .\Client\Views\Models\Namespace\SomeModel.cs    /^    public class SomeModel$/;"    kind:c  line:12 namespace:Views.Models.SomeModel    access:public
 // Note the extra [ \t]* right after ^
 --regex-vb=/^[ \t]*(Public|Private|\b)[ \t]*Sub[ \t]+([a-zA-Z0-9_]+)/\2/s,subroutine/i
--exclude="bin"
--exclude="obj"
--langdef=vb
--langmap=vb:.vb
--regex-vb=/^[ \t]*(Public|Private)?[ \t]*Sub[ \t]+([a-zA-Z0-9_]+)/\2/s,subroutine/i
--regex-vb=/^[ \t]*(Public|Private)?[ \t]*Function[ \t]+([a-zA-Z0-9_]+)/\2/f,function/i
--regex-vb=/^[ \t]*(Public|Private)[ \t]+([a-zA-Z0-9_]+)[ \t]+As[ \t]+/\2/v,variable/i
--regex-vb=/^[ \t]*(Public|Private)?[ \t]*Const[ \t]+([a-zA-Z0-9_]+)[ \t]+(As|=)[ \t]+/\2/c,const/i
--regex-vb=/^[ \t]*(Public)?[ \t]*Property[ \t]*(Get|Let|Set)[ \t]+([a-zA-Z0-9_]+)/\3/n,name/i
--regex-vb=/^[ \t]*(Public|Private)?[ \t]*Enum[ \t]+([a-zA-Z0-9_]+)/\2/e,enum/i
#--regex-vb=/^[ \t]*([a-zA-Z_]+):/\1/l,label/i
--recurse
--fields=+ianmzS
--extra=+fq
--vb-kinds=cn