如何在Vim+Ctags+Taglist应用中添加自定义语言: systemverilog

确切的应该是转载别人的,然后修改的:

如何在Vim+Ctags+Taglist应用中添加自定义语言

 Vim+Ctags+Taglist的应用是一个非常方便的解决方案,网络上关于这样的简单介绍数不胜数,只要愿意不妨搜索一下即可。

但是有一个问题是大多数文章没有阐明的,那就是如何添加原本不被Ctags和taglist所支持的语言呢?花了点时间,找到了解决,姑且备忘于下,希望利人利己。

本文均以SystemVerilog为例说明:

【1】Ctags中添加新的语言


    ctags的配置文件其实在 ~/.ctags中,打开该文件,添加如下代码[1. 从某论坛上看到,做了一定修改,用以支持extern,static等前缀]:

--langdef=systemverilog

--langmap=systemverilog:.sv.svh.svi

--regex-systemverilog=/^[ ]*(virtual)?[ ]*class[ ]*([a-zA-Z_0-9]+)/\2/c,class/

--regex-systemverilog=/^[ ]*(extern)?[ ]*(static)?[ ]*(virtual)?[ ]*task[ ]*.*[ ]+([a-zA-Z_0-9]*::)?([a-zA-Z_0-9]+)[ ]*[(;]/\5/t,task/

--regex-systemverilog=/^[ ]*(extern)?[ ]*(static)?[ ]*(virtual)?[ ]*function[ ]*.*[ ]+([a-zA-Z_0-9]*::)?([a-zA-Z_0-9]+)[ ]*[(;]/\5/f,function/

--regex-systemverilog=/^[ ]*module[ ]*([a-zA-Z_0-9]+)/\1/m,module/

--regex-systemverilog=/^[ ]*program[ ]*([a-zA-Z_0-9]+)/\1/p,program/

--regex-systemverilog=/^[ ]*interface[ ]*([a-zA-Z_0-9]+)/\1/i,interface/

--regex-systemverilog=/^[ ]*package[ ]*([a-zA-Z_0-9]+)/\1/k,package/

--regex-systemverilog=/^[ ]*typedef[ ]+.*[ ]+([a-zA-Z_0-9]+)[ ]*;/\1/e,typedef/

--regex-systemverilog=/^[ ]*·define[ ]+([a-zA-Z_0-9]+)/\1/d,define/

--systemverilog-kinds=+ctfmpike


    这里从代码可以读出无非是依次定义了新的语言种类,指明了文件后缀,然后使用正则匹配来抓出你希望的关键字,熟悉正则表达式的人自然一读就懂,可以自己扩展,不熟悉的人,那就照copy吧。


【2】Taglist中添加语言种类

------------------需要读一下它的readme 的, 在taglist.vim 中有下面这段

" Variable name format:
"
"       s:tlist_def_{vim_ftype}_settings

" vim_ftype - Filetype detected by Vim
"

" Value format:
"
"       ;:;:;...
"
" ctags_ftype - File type supported by exuberant ctags
" flag        - Flag supported by exuberant ctags to generate a tag type
" name        - Name of the tag type used in the taglist window to display the
"               tags of this type

所以要保证两个方面: 1. vim 能识别file type, 2.ctags 能识别file type

1.vim 可以在.sv 或者.v 文件中:set filetype 来查看文件属性

可以通过:.vim/ftdetect/verilog_systemverilog.vim:13:au BufRead,BufNewFile *.v,*.vh,*.sv,*.sa,*svhset filetype=verilog_systemverilog 设置成你希望的文件属性

2. ctags: 在taglist 的doc中有:

$ ctags --list-maps=all

$ ctags --list-kinds=all

两个命令可以查看ctags支持的类型,不过没有找到如何改,一般不需要改的,我的default就是支持verilog/systemverilog的


打开taglist的文件,例如 ~/.vim/plugin/taglist.vim, 添加下面的内容:

” systemverilog language

let s:tlist_def_verilog_systemverilog_settings= 'systemverilog;m:module;c:class;' .  \'t:task;p:program;f:function;i:interface;e:typedef'

语句也很简单,就是添加了一类可以被Taglist识别的语法种类,同时规定了那些部分是需要显示在tag list当中的;

【3】Vim当中添加File type


    似乎有点本末倒置了,呵呵,其实最开始的一点就是要让vim也能够识别出systemverilog的文件,那么请打开~/.vimrc,加入下面这一行:

au BufNewFile,BufRead *.sv,*.svh    setf systemverilog

同时不要忘记'filetype on'来保证vim会去识别语法种类(当然,这个其实也是使用语法高亮的基本要求)。

如果有systemverilog 高亮的话,在.vimrc中设置的可能不会起作用,所以如果systemverilog高亮的.vim 就不需要则会vimrc中设置了


【4】步骤


    使用的时候,无非就是按照:1. ctags -R * 来生成tag文件;2. vim打开文件,并且可以适当设置 set tags+=~/Methodology/uvm/uvm-1.1d/src/tags来load文件;3. 用:Tlist打开tag侧边栏,其余都可以按照网上教程操作。


你可能感兴趣的:(SV)