我正在尝试为 vim 标签栏配置“自定义语言”,以允许标签栏用于查看 Abaqus 有限元分析输入文件。
我从以下链接复制了示例:
http://github.com/majutsushi/tagbar/wiki
http://andrew.stwrt.ca/posts/vim-ctags/
http://ctags.sourceforge.net/EXTENDING.html
这是我正在使用的软件:
- RHEL 6.7
- 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 文件,我希望部分的正则表达式返回:
- 部分名称一
部分名称二
section_regex = ^\*\*\*[\*]+\n\*\*[ \tA-Za-z]+
对于上面的 example.inp 文件,我希望关键字的正则表达式返回:
- 关键字1
- 关键字2
- 关键字3
关键字正则表达式 =^\*[A-Za-z]+