1

Abaqus 有限要素解析入力ファイルの表示にタグバーを使用できるようにする vim タグバーの「カスタム言語」を構成しようとしています。

次のリンクから例を複製しました。

http://github.com/majutsushi/tagbar/wiki

http://andrew.stwrt.ca/posts/vim-ctags/

ctags、vimwiki、vim、tagbar-plugin

http://ctags.sourceforge.net/EXTENDING.html

これは私が使用しているソフトウェアです:

  • RHEL6.7
  • vim 7.4
  • タグバー 2.6.1
  • 熱狂的なCtags 5.8

Abaqus 入力ファイル example.inp の例

** Analyst:
** Comments
** More comments
**
****************************************
** Section Name One
****************************************
*Keyword1
*KEYWORD2
**
****************************************
** Section Name Two
****************************************
*Keyword3

これは、vim 構成ファイル ~/.vimrc に追加したものです。

let g:tagbar_type_AbaqusINP = {
    \ 'ctagstype' : 'AbaqusINP',
    \ 'kinds' : [
        \ 's:Section',
        \ 'k:Keyword'
    \ ],
    \ 'sort' : 0
\ }

ctags 構成ファイル ~/.ctags を作成しました

--langdef=AbaqusINP
--langmap=AbaqusINP:.inp
--regex-AbaqusINP=/^\*\*\*[\*]+\n\*\*[ \tA-Za-z]+/\3/s,Section/
--regex-AbaqusINP=/^\*[A-Za-z]+/\1/k,Keyword/

入力ファイルを開いてからタグバーを開くと、何もありません。コマンド ラインから次のコマンドを呼び出すと、AbaqusINP *.inp がリストに表示されます。

$ ctags --list-maps
Ant       *.build.xml
...
AbaqusINP *.inp

タグ ファイルを手動で作成しようとすると、キーワードが見つかった行ごとに次の警告が表示されます。

$ ctags example.inp
ctags: Warning: example.inp:8: null expansion of name pattern "\1"
ctags: Warning: example.inp:9: null expansion of name pattern "\1"
ctags: Warning: example.inp:14: null expansion of name pattern "\1"

タグ ファイルが作成されますが、既定のヘッダーだけが読み込まれます。

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

ctags がタグバーが使用するタグを作成しない理由について何か考えはありますか? ご協力いただきありがとうございます。



更新: 必要な正規表現を明確にします。

セクション名とキーワードにタグを付けてほしい。これらのパターンを vim で試したところ、正しく動作するように見えました。

上記の example.inp ファイルの場合、セクションの正規表現が返されるようにします。

  • セクション名 1
  • セクション名 2

    section_regex = ^\*\*\*[\*]+\n\*\*[ \tA-Za-z]+


上記の example.inp ファイルの場合、キーワードの正規表現が返されるようにします。

  • キーワード1
  • キーワード2
  • キーワード3

キーワード_正規表現 =^\*[A-Za-z]+

4

1 に答える 1

0

これによれば、 ctags は複数行の正規表現をサポートしていません。

私が到達できるより近い解決策は次のとおりです。

--langdef=AbaqusINP
--langmap=AbaqusINP:.inp
--regex-AbaqusINP=/^\*\*([ \tA-Za-z0-9]+)/\1/s,Section/
--regex-AbaqusINP=/^\*([A-Za-z0-9]+)/\1/k,Keyword/

replace\1式の は match 式のグループを参照するため、対象のキーワードを括弧で囲む必要があることに注意してください。これが、これらの警告を受け取った理由です。また、キーワードの正規表現を修正して、数値を含めることができるようにしました。

上記の構成は、投稿した例の次のタグを返します。

Analyst test.inp    /^** Analyst:$/;"   s
Comments    test.inp    /^** Comments$/;"   s
KEYWORD2    test.inp    /^*KEYWORD2$/;" k
Keyword1    test.inp    /^*Keyword1$/;" k
More comments   test.inp    /^** More comments$/;"  s
Section Name One    test.inp    /^** Section Name One$/;"   s
Section Name Two    test.inp    /^** Section Name Two$/;"   s

これでもコメントが返されますが、これは望ましくありません。しかし、私が収集できる限り、通常のコメントを使用してセクションを定義しているため、形式が固定されていないと思います。これが当てはまる場合、考えられる解決策の 1 つは次のとおりです。

--langdef=AbaqusINP
--langmap=AbaqusINP:.inp
--regex-AbaqusINP=/^\*\* *(Section +[ \tA-Za-z0-9]+)/\1/s,Section/
--regex-AbaqusINP=/^\*([A-Za-z0-9]+)/\1/k,Keyword/

すべてのセクションがキーワード「セクション」で始まる必要がありますが、探しているものが返されます。

KEYWORD2    test.inp    /^*KEYWORD2$/;" k
Keyword1    test.inp    /^*Keyword1$/;" k
Section Name One    test.inp    /^** Section Name One$/;"   s
Section Name Two    test.inp    /^** Section Name Two$/;"   s
于 2015-10-22T01:47:05.840 に答える