3

ここでは仕事で .NET を使用しており、私たちのプロジェクトは VB と C# が少し混ざっています。Exuberant Ctags は、これらの手順に従って、私にとっては問題なく C# タグを生成します。ただし、VB.NET コードのタグを生成する方法をまだ理解できていません。私が見つけた唯一の記事で、多少役に立ったのはこの記事です。しかし、2003 年の時点では、わずか数年しか経過していません。最初に気づいたのは、次の行です。

--langmap=vb:.bas.cls.ctl.frm.vbs

間違っていて、また古いです。私はそれを読むように変更しました:

--langmap=vb:.vb

これにより結果はわずかに改善されましたが、それでも期待どおりの動作が生成されないようです (たとえば:set tag=tags、関数呼び出しまたはパラメーターで ^] または g] を実行すると、タグがありません)。

これは私のctags.cnfファイルがどのように見えるかです (そして、それが使用されていることを確認しました):

--langdef=vb
--langmap=vb:.vb
--regex-vb=/^(Public|Private|\b)[ \t]*Sub[ \t]+([a-zA-Z0-9_]+)/\2/s,subroutine/i
--regex-vb=/^(Public|Private|\b)[ \t]*Function[ \t]+([a-zA-Z0-9_]+)/\2/f,function/i
--regex-vb=/^(Public|Private)[ \t]+([a-zA-Z0-9_]+)[ \t]+As[ \t]+/\2/v,variable/i
--regex-vb=/^(Public|Private|\b)[ \t]*Const[ \t]+([a-zA-Z0-9_]+)[ \t]+(As|=)[ \t]+/\2/c,const/i
--regex-vb=/^(Public|\b)[ \t]*Property[ \t]*(Get|Let|Set)[ \t]+([a-zA-Z0-9_]+)/\3/n,name/i
--regex-vb=/^(Public|Private|\b)[ \t]*Enum[ \t]+([a-zA-Z0-9_]+)/\2/e,enum/i
--regex-vb=/^([a-zA-Z_]+):/\1/l,label/i
--recurse
--exclude="bin"
--exclude="obj"
--fields=+ianmzS
--extra=+fq
--vb-kinds=cn

適切なサポートを受けるために必要な手がかりはありますか?

編集:

これは私のタグファイルからの抜粋です:

!_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
4

2 に答える 2

3

インデントゼロのコーディング規則に従わない限り、正規表現は機能しません;)

試す:

 // Note the extra [ \t]* right after ^
 --regex-vb=/^[ \t]*(Public|Private|\b)[ \t]*Sub[ \t]+([a-zA-Z0-9_]+)/\2/s,subroutine/i
于 2012-07-04T14:08:21.663 に答える
2

~/.ctagsこれは、 OP の設定に基づいて、受け入れられた回答の編集を適用した、my から抽出された実際の設定です。

これにより、すべてのサブ/関数の一致が妨げられたため (理由は不明)、ラベル マッチャーを削除する(Public|Private|\b)必要(Public|Private)?がありました。

--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
于 2014-02-11T11:31:58.000 に答える