vim tagbar: 自定义语言配置
vim tagbar: custom language configuration
我正在尝试为 vim 标签栏配置一个 "custom language",这将允许标签栏用于查看 Abaqus 有限元分析输入文件。
我从以下链接复制了示例:
http://github.com/majutsushi/tagbar/wiki
http://andrew.stwrt.ca/posts/vim-ctags/
ctags, vimwiki, vim and tagbar-plugin
http://ctags.sourceforge.net/EXTENDING.html
这是我正在使用的软件:
- RHEL 6.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]+//s,Section/
--regex-AbaqusINP=/^\*[A-Za-z]+//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 ""
ctags: Warning: example.inp:9: null expansion of name pattern ""
ctags: Warning: example.inp:14: null expansion of name pattern ""
标签文件已创建,但仅填充了默认 header。
!_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 没有创建供 tagbar 使用的标签?感谢您的帮助。
更新:阐明所需的正则表达式。
我想为栏目名称和关键字分配标签。我在 vim 中尝试了这些模式,它们似乎工作正常。
对于上面的 example.inp 文件,我希望部分的正则表达式为 return:
- 栏目名称一
栏目名称二
section_regex = ^\*\*\*[\*]+\n\*\*[ \tA-Za-z]+
对于上面的 example.inp 文件,我希望关键字的正则表达式为 return:
- 关键字 1
- 关键字 2
- 关键字 3
keyword_regex = ^\*[A-Za-z]+
根据this ctags 不支持多行正则表达式。
我能得到的更接近的解决方案是:
--langdef=AbaqusINP
--langmap=AbaqusINP:.inp
--regex-AbaqusINP=/^\*\*([ \tA-Za-z0-9]+)//s,Section/
--regex-AbaqusINP=/^\*([A-Za-z0-9]+)//k,Keyword/
考虑到替换表达式中的 </code> 指的是匹配表达式中的组,因此需要在感兴趣的关键字周围加上括号。这就是您收到这些警告的原因。
我还修复了关键字正则表达式以允许包含数字。</p>
<p>上面的配置将为您发布的示例 return 以下标签:</p>
<pre><code>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
这仍然是return评论,这是不可取的。
但是据我所知,您使用的是普通注释来定义部分,所以我猜格式不是固定的。如果这是真的,一种可能的解决方案是:
--langdef=AbaqusINP
--langmap=AbaqusINP:.inp
--regex-AbaqusINP=/^\*\* *(Section +[ \tA-Za-z0-9]+)//s,Section/
--regex-AbaqusINP=/^\*([A-Za-z0-9]+)//k,Keyword/
尽管它要求所有部分都以关键字 "Section" 开头,但它会 return 您要查找的内容:
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
我正在尝试为 vim 标签栏配置一个 "custom language",这将允许标签栏用于查看 Abaqus 有限元分析输入文件。
我从以下链接复制了示例:
http://github.com/majutsushi/tagbar/wiki
http://andrew.stwrt.ca/posts/vim-ctags/
ctags, vimwiki, vim and tagbar-plugin
http://ctags.sourceforge.net/EXTENDING.html
这是我正在使用的软件:
- RHEL 6.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]+//s,Section/
--regex-AbaqusINP=/^\*[A-Za-z]+//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 ""
ctags: Warning: example.inp:9: null expansion of name pattern ""
ctags: Warning: example.inp:14: null expansion of name pattern ""
标签文件已创建,但仅填充了默认 header。
!_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 没有创建供 tagbar 使用的标签?感谢您的帮助。
更新:阐明所需的正则表达式。
我想为栏目名称和关键字分配标签。我在 vim 中尝试了这些模式,它们似乎工作正常。
对于上面的 example.inp 文件,我希望部分的正则表达式为 return:
- 栏目名称一
栏目名称二
section_regex = ^\*\*\*[\*]+\n\*\*[ \tA-Za-z]+
对于上面的 example.inp 文件,我希望关键字的正则表达式为 return:
- 关键字 1
- 关键字 2
- 关键字 3
keyword_regex = ^\*[A-Za-z]+
根据this ctags 不支持多行正则表达式。
我能得到的更接近的解决方案是:
--langdef=AbaqusINP
--langmap=AbaqusINP:.inp
--regex-AbaqusINP=/^\*\*([ \tA-Za-z0-9]+)//s,Section/
--regex-AbaqusINP=/^\*([A-Za-z0-9]+)//k,Keyword/
考虑到替换表达式中的 </code> 指的是匹配表达式中的组,因此需要在感兴趣的关键字周围加上括号。这就是您收到这些警告的原因。
我还修复了关键字正则表达式以允许包含数字。</p>
<p>上面的配置将为您发布的示例 return 以下标签:</p>
<pre><code>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
这仍然是return评论,这是不可取的。 但是据我所知,您使用的是普通注释来定义部分,所以我猜格式不是固定的。如果这是真的,一种可能的解决方案是:
--langdef=AbaqusINP
--langmap=AbaqusINP:.inp
--regex-AbaqusINP=/^\*\* *(Section +[ \tA-Za-z0-9]+)//s,Section/
--regex-AbaqusINP=/^\*([A-Za-z0-9]+)//k,Keyword/
尽管它要求所有部分都以关键字 "Section" 开头,但它会 return 您要查找的内容:
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