|
Ctags的使用心得
1 下载地址:http://ctags.sourceforge.net 下载文件ctags58.zip
2 解压后是源码,估计都没啥用,感觉就那个exe文件有点用。这个别管了,直接放到一个目录里,我放到了D:\ctags58。
3 下面设置一下环境变量。将D\ctags58放到path里。这样可以直接运行这下面的ctags.exe文件。
4 随便打开一个文件,用命令:!ctags –R *就可以将本文件夹的全部文件都加入到tags文件中了。怎样将几个文件夹的都弄到一起,以后再研究。
5 然后就是几个tag的命令了
:ts <name> 这个是将含有name的所有文件列出来,然后你按1 2 3 4就可以选择了
Ctrl+] 这个一按直接跳转了
Ctrl+T 这个一按就跳回去了
6 难点就是这个tags如何设置。
因为每建立一个工程都会新建一个文件夹,而tags最先调用的是本文件夹下的tags,所以在新建了一个工程后,在顶层文件下运行:! Ctags –R *,就会自动生成tags文件,有更新的话可以再次用此命令即可。
为了方便在vimrc中用一个按键<F9>来代替此命令,实现如下:
"生成一个tags文件
nmap <F9> <Esc>:!ctags -R *<CR>
tags 生成之后,虽然ctrl+T和]比较方便,但其主要是为一些其他插件提供支持。现在最有用的就是taglist了。
TagList
1 下载地址:http://www.vim.org/scripts/script.php?script_id=273 下载文件taglist_45.zip
2 解压后
├─doc
│ taglist.txt
└─plugin
taglist.vim
放到~/Vim72相应的文件夹里。
3 在vimrc中还需要一些设置,照搬就行,除了路径。具体含义有的还没搞懂,最重要的是<F8>打开taglist。
let Tlist_Show_Menu = 1
" 这项必须设定,否则出错,配置taglist的ctags路径
let Tlist_Ctags_Cmd = 'D:\ctags58\ctags.exe'
" 使用F8打开Taglist
nnoremap <silent> <F8> :TlistToggle<CR>
"设置Taglist
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
4 TagList可以使用了,但是vhdl语言不支持。。。悲剧啊。还得研究。结果如下。
给TagList添加语言类型
1 添加文件类型。
~\vim72\filetype.vim 中添加文件类型,可以让vim识别文件的类型。在filetype.vim中添加:
" VHDL
au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst setf vhdl
au BufNewFile,BufRead *.vhdl_[0-9]* call s:StarSetf('vhdl')
" System Verilog
au BufNewFile,BufRead *.sv,*.svh setf systemverilog
同时vimrc中需要将文件类型设置打开:
set filetype on
上面这2行都是vim默认已经有了的,一般不用改了。
我需要加入psm文件类型,则在filetype.vim中添加:
" psm汇编
au BufNewFile,BufRead *.psm setf psm
2 在taglist.vim中添加vhdl类型
在文件:~\vim72\plugin\taglist.vim中添加:
"vhdl language
let s:tlist_def_vhdl_settings = 'vhdl;e:entity;c:constant;t:type;C:component;f:fuction;p:procedure;P:package'
"systemverilog language
let s:tlist_def_systemverilog_settings= 'systemverilog;m:module;c:class;' .
\ 't:task;p:program;f:function;i:interface;e:typedef'
貌似只支持entity和component,不过也够用了,可能function也能用。
Signal加进去没反应:(,不过signal都加进去了那就太多了。
System Verilog是抄别人的,不知道对不对。
OK,设置完这些之后,taglist应该可以正常的工作了。按F8就会显示出来。Taglist的具体设置应该还有一些,有空再研究。
PS(2010-9-15):taglist在新的文件夹里有时候会失效,点更新tags会发现他没有识别到ctags.exe文件,他用的是tags.exe。在D:/Ctags58文件夹中复制一个ctags.exe将其改名为tags.exe就可以解决这个问题了。有的时候用的又是ctags。。。。NND 不知道什么原因。另外中文名也不行。原因未知。。。。。
================================================
如何在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/
--systemverilog-kinds=+ctfmpike
这里从代码可以读出无非是依次定义了新的语言种类,指明了文件后缀,然后使用正则匹配来抓出你希望的关键字,熟悉正则表达式的人自然一读就懂,可以自己扩展,不熟悉的人,那就照copy吧。
【2】Taglist中添加语言种类
打开taglist的文件,例如 ~/.vim/plugin/taglist.vim, 添加下面的内容:
” systemverilog language
let s:tlist_def_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的文件,那么请打开~/.vim/filetype.vim,加入下面这一行:
au BufNewFile,BufRead *.sv,*.svh setf systemverilog
同时不要忘记'set filetype on'来保证vim会去识别语法种类(当然,这个其实也是使用语法高亮的基本要求)。
【4】步骤
使用的时候,无非就是按照:1. ctags -R * 来生成tag文件;2. vim打开文件,并且可以适当设置' set tags=xxxxxx' 来load文件;3. 用:Tlist打开tag侧边栏,其余都可以按照网上教程操作。