如何在Vim+Ctags+Taglist应用中添加自定义语言: systemverilog, 更新function 正则表达式

确切的应该是转载Vinson_Yin,然后修改的:https://blog.csdn.net/ocarvb/article/details/53354147

 

背景: 2021年4月16日: 之前用的是tagbar , 大文件时启动慢; vista.vim 功能比较多, 虽然是vim8 异步, 但是打开vim 比较慢.

结论: taglist 功能简洁; 满足常用快速浏览 task 和function.

 

需要准备: vim8.0 (自带的systemverilog 语法), 下载 taglist_46.zip  (https://www.vim.org/scripts/script.php?script_id=273)

 

1. 需要新增 $HOME/.ctags 

  使用指令可以查看ctags 支持的语言

    $ ctags --list-maps=all

    $ ctags --list-kinds=all

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

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

--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*\[.+\])??\s*(\w+::)?\s*(\b\w+\b)/\7/f,function/
--regex-systemverilog=/^\s*\bmodule\b\s*(\b\w+\b)/\1/m,module/
--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(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=/^\s*(\b(input|ouput|inout)\b)?\s*(\[.+\])*\s*(\b(wire|reg|logic)\b)\s*(\[.+\])*\s*(#(\(.+\)|S+)\))?\s*(\b\w+\b)/\9/v,variable/
--regex-systemverilog=/^\s*(\b(parameter|localparam)\b).+(\b\w+\b)\s*=/\3/a,parameter/

--systemverilog-kinds=+ctfmpied



这的function 正则匹配做了以下升级: 

--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*(\b(static|local|virtual|protected)\b)*\s*\bfunction\b\s*(\b(\w+)\b)?(\s*\[.+\])??\s*(\w+::)?\s*(\b\w+\b)/\7/f,function/

适配这种情况:
function bit [11:0] freq_func(input bit[6:0] freqrange);
 

2. 需要在taglist/autoload/taglist.vim  line_340新增以下代码(参考上面的verilog)

"systemverilog language
let s:tlist_lang_def["systemverilog"] = 'systemverilog;m:module;c:class;' .
            \ 't:task;p:program;f:function;i:interface;e:typedef'

3. 更新vimrc

    "Taglist ###########################

    let Tlist_Ctags_Cmd = '<YOUR_PATH>/ctags'

    let Tlist_Show_One_File = 1   
    let Tlist_Exit_OnlyWindow = 1 
    " let Tlist_Use_Right_Window = 1
    " let Tlist_Compact_Format = 1    " remove message <F1> show help

PS:  几个常用的非贪婪匹配Pattern

  •   *? 重复任意次,但尽可能少重复
  •   +? 重复1次或更多次,但尽可能少重复
  •   ?? 重复0次或1次,但尽可能少重复
  •   {n,m}? 重复n到m次,但尽可能少重复
  •   {n,}? 重复n次以上,但尽可能少重复
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lhwcake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值