ctags

Tags are keywords extracted from the files which are used for easy and quick file navigation.


Creating tags:

ctags -R *

This command creates a file named "tags" containing all the extracted keyword/tags from files in current and below directory.


Vimrc config:

set tags=./tags;$PATH/tags;...

List of tags file to be loaded are given as input in vimrc


Ctags customization:

Below file (content) defines the rules to extract tags in system verilog file. This can be extended as per user requirement.


--exclude=.SOS

--exclude=.git

--exclude=nobackup

--exclude=nobkp


--langdef=systemverilog

--langmap=systemverilog:.v.vg.sv.svh.tv.vinc


--regex-systemverilog=/^\s*(\b(static|local|virtual|protected)\b)*\s*\bclass\b\s*(\b\w+\b)/\3/c,class/

--regex-systemverilog=/^\s*(\b(static|local|virtual|protected)\b)*\s*\btask\b\s*(\b(static|automatic)\b)?\s*(\w+::)?\s*(\b\w+\b)/\6/t,task/

--regex-systemverilog=/^\s*(\b(static|local|virtual|protected)\b)*\s*\bfunction\b\s*(\b(\w+)\b)?\s*(\w+::)?\s*(\b\w+\b)/\6/f,function/


--regex-systemverilog=/^\s*\bmodule\b\s*(\b\w+\b)/\1/m,module/

--regex-systemverilog=/^\s*\bpackage\b\s*(\b\w+\b)/\1/p,package/

--regex-systemverilog=/^\s*\bprogram\b\s*(\b\w+\b)/\1/p,program/

--regex-systemverilog=/^\s*\binterface\b\s*(\b\w+\b)/\1/i,interface/

--regex-systemverilog=/^\s*\btypedef\b\s+.*\s+(\b\w+\b)\s*;/\1/e,typedef/

--regex-systemverilog=/^\s*`define\b\s*(\w+)/`\1/d,define/

--regex-systemverilog=/}\s*(\b\w+\b)\s*;/\1/e,typedef/


--regex-systemverilog=/^\s*(\b(static|local|private|rand)\b)*\s*(\b(shortint|int|longint)\b)\s*(\bunsigned\b)?(\s*\[.+\])*\s*(\b\w+\b)/\7/v,variable/

--regex-systemverilog=/^\s*(\b(static|local|private|rand)\b)*\s*(\b(byte|bit|logic|reg|integer|time)\b)(\s*\[.+\])*\s*(\b\w+\b)/\6/v,variable/

--regex-systemverilog=/^\s*(\b(static|local|private)\b)*\s*(\b(real|shortreal|chandle|string|event)\b)(\s*\[.+\])*\s*(\b\w+\b)/\6/v,variable/

--regex-systemverilog=/(\b(input|output|inout)\b)?\s*(\[.+\])*\s*(\b(wire|reg|logic)\b)\s*(\[.+\])*\s*(#(\(.+\)|\S+)\))?\s*(\b\w+\b)/\9/v,variable/

--regex-systemverilog=/(\b(parameter|localparam)\b).+(\b\w+\b)\s*=/\3/a,parameter/


--systemverilog-kinds=+ctfmpied


--languages=systemverilog,C,C++,HTML,Lisp,Make,Matlab,Perl,Python,Sh,Tex


Using ctags:

  1. Open file using tag

gvim -t <tag>

  1. Opening file under tag inside a file (cursor over tag)

Ctrl + ]

  1. Returning back to original file

Ctrl + t

  1. Other useful comands

:ts <tag> <RET> Search for a particular tag

:tn Go to the next definition for the last tag

:tp Go to the previous definition for the last tag

:ts List all of the definitions of the last tag