systemverilog语法_Vim for Verilog/Systemverilog

systemverilog语法_Vim for Verilog/Systemverilog_第1张图片

1. 基本配置
2. 插件管理pathogen
3. 注释管理 nerdcommenter
4. 文件系统浏览器 nerdtree
5. tag浏览 tagbar
6. 模糊搜索 fzf
7. 文本内跳转 easymotion
8. 广义标签跳转 matchit
9. 区域选择增强 vim-expand-region
10. 文件缓存管理 bufexplorer
11. 会话管理
12. 静态语法检查 ale
13. 括号补全 auto-pairs
13. 代码补全 completor
14. 代码片段生成 ultisnips
15. 多光标编辑 vim-multiple-cursors
16. 重复操作增强 vim-repeat
17. 字符对齐 vim-easy-align
18. 状态栏渲染 vim-airline
19. c语言解析增强
20. python语言解析文件增强
21. systemverilog语言解析增强
22. vim配色方案
23. vim调试
24. 弃用的插件
25. 后记

1. 基本配置

使用vim基本配置脚本(略)

2. 插件管理pathogen

  • 创建~/.vim/bundle 目录,并在该目录下使用:
    git clone https://github.com/tpope/vim-pathogen.git
  • vimrc头部加上:
    runtime bundle/vim-pathogen/autoload/pathogen.vim
    execute pathogen#infect()

3. 注释管理 nerdcommenter

  • 参考 https://github.com/scrooloose/nerdcommenter
    cd ~/.vim/bundle
    git clone https://github.com/scrooloose/nerdcommenter.git
  • 通过toggle的方式切换一行注释与取消注释 ,推荐绑定到Normal模式下的BackSpace键
    nmap NERDCommenterToggle
  • 注释时 在左注释符之后右注释符之前(若有) 自动插入一个空格
    let g:NERDSpaceDelims = 1
  • 如果想要将C语言的默认注释符改为//,可以在 ~/.vim/bundle/nerdcommenter/plugin/NERD_commenter.vim line111附近找到c注释配置,
    修改为 'c': { 'left': '//', 'leftAlt': '/', 'rightAlt': '/' }, 即cpp的注释风格。

4. 文件目录浏览器 nerdtree

  • 参考 https://github.com/scrooloose/nerdtree
  • 如果下面映射不加leader直接映射成nt,则会造成N n上下跳转严重延迟,也就是冲突。
    nnoremap nt :NERDTreeToggle "冲突案例
  • 无论是mksession命令还是其他session插件,在再次打开会话后均无法恢复nerdtree的窗口显示,之后再启动nerdtree则又会再打开一个新nerdtree显示窗口
    解决方法: 在保存或自动保存session前关毕nerdtree
  • 注意,nerdtree如果设定如下,会和bufexplorer冲突,致使其无法Toggle,因此不要使用此设置。
    " open NERDTree automatically when vim starts up on opening a directory
    autocmd StdinReadPre * let s:std_in=1
    autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0]

5. tag浏览 tagbar

  • 参考 https://github.com/majutsushi/tagbar
  • 需要ctags的支持;支持所有ctags能识别的语言
  • 对于systemverilog的支持参考 https://github.com/majutsushi/tagbar/wiki#systemverilog
    注:需要在~/.vimrc和.~/.ctags中手动添加配置

6. 模糊搜索 fzf

  • 参考 https://github.com/junegunn/fzf https://github.com/junegunn/fzf.vim
  • 使用 https://segmentfault.com/a/1190000016186540 https://segmentfault.com/a/1190000011328080 https://zhuanlan.zhihu.com/p/41859976
  • fzf几乎就算是linux下的Everything软件了。

7. 文本内跳转 easymotion

  • 参考 https://github.com/lokaltog/vim-easymotion
  • 相当于对n N跳转和f t跳转实现了增强
  • 下面的绑定方式,“重新定义了”vim默认的f和t
    nmap t (easymotion-f)
    nmap ff (easymotion-s2)
    nmap f (easymotion-s)
    omap f (easymotion-s)

8. 广义标签跳转 matchit

  • git clone https://github.com/vim-scripts/matchit.zip 使用这个源,克隆到~/.vim/bundle/下
  • 这是对%括号间匹配跳转的增强,如begin - end如果被定义为一对,那么就可以把它们看做成对标签的一部分。默认仍然使用%跳转。
  • 在vimrc添加如下设置,方便更好的浏览systemverilog代码。也可以放到语言解析文件中。
    let b:match_words = '::,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . ':,'
    . '||:,'
    . ':||,'
    . '`ifdef>:`else>:`endif>,'
    . ':'

9. 区域选择增强 vim-expand-region

  • 参考 https://github.com/terryma/vim-expand-region
  • 类似手敲vip块选中,此插件在光标处expand,会识别选中更广义上的块。

10. 文件缓存管理 bufexplorer

  • 参考 https://github.com/jlanzarotta/bufexplorer
  • 用bufexplorer插件中按d减去buffer,而不用手工:bd关闭当前窗口的buffer。
  • 典型操作:绑定到toggle,则在normal模式下,每次按可以在分栏中列出所有buffer,使用v,s,t或鼠标点击选中条目打开。

11. 会话管理

  • 使用原生指令
    :mksession session.vim 保存当前vim会话
    :source session.vim 恢复vim会话
    vim -S session.vim 启动vim时恢复session
  • 由于viminfo只有1个,因此,如果想要记录并恢复不同文件的修改,则需要另外的undo插件对每一次修改历史做记忆。

12. 静态语法检查 ale

  • 参考 https://github.com/w0rp/ale https://www.veripool.org/projects/verilator/wiki/Installing
  • 需结合各语言的lint工具使用
    提前安装yapf,flake8,pylint;配置ale在保存python文件时可自动检错以及对其格式化。
    对于verilog需要预先安装verilator,然后就可以使用ale调用verilator的lint功能。ale配合verilator支持对verilog以及systemverilog可综合部分的静态语法检查。
  • 打开~/.vim/bundle/vim-airline/autoload/airline/extensions/ale.vim
    找到
    let error_symbol = get(g:, 'airline#extensions#ale#error_symbol', 'E:')
    let warning_symbol = get(g:, 'airline#extensions#ale#warning_symbol', 'W:') 替换为
    let error_symbol = get(g:, 'airline#extensions#ale#error_symbol', '✗ ')
    let warning_symbol = get(g:, 'airline#extensions#ale#warning_symbol', '⚡') 以上是可选的显示设置,也可以不替换。

13. 括号补全 auto-pairs

  • 参考 https://github.com/jiangmiao/auto-pairs
  • alt+e在gvim中失效,alt+p时而被译码成了p粘贴,因此避免使用这些映射。
  • {|} 换行缩进,是按照该语言的indent配置所规定的来进行的,所以可能有时候缩进不是很理想,是因/usr/share/vim/vim80/indent/下的语言缩进配置文件太陈旧了。

13. 代码补全 completor

  • 参考 https://github.com/maralla/completor.vim https://github.com/masawada/completor-dictionary
  • 环境要求
    python映射到python3
    使用pip3安装jedi
  • 写verilog同样支持补全,至少是基于buffer的补全。
  • 轻便,轻度使用不差YCM;重度使用转IDE。

14. 代码片段生成 ultisnips

  • 参考 https://github.com/sirver/ultisnips https://github.com/honza/vim-snippets
  • 将ultisnips和vim-snippets克隆到~/.vim/bundle下,之后也可自己写snippets文件。
  • ultisnips默认可以识别vim-snippets下所有的snippets文件,准确的说是可识别bundle下的所有snippets文件。
  • 代码片段会自动在代码补全时作为待选条目之一弹出供选择。

15. 多光标编辑 vim-multiple-cursors

  • 参考https://github.com/terryma/vim-multiple-cursors
  • 便于重构代码

16. 重复操作增强 vim-repeat

  • 参考 https://github.com/tpope/vim-repeat
  • 可以结合surround插件使用

17. 字符对齐 vim-easy-align

  • 参考 https://github.com/junegunn/vim-easy-align
  • 解决了tabular存在的部分问题,但是也引入了新的问题。
  • verilog中对齐“<=”很方便。

18. 状态栏渲染 vim-airline

  • 参考 https://github.com/bling/vim-airline https://github.com/vim-airline/vim-airline-themes https://github.com/bling/vim-bufferline https://github.com/powerline/fonts
    使用前需要给字体打powerline补丁;也可以直接安装打过补丁的字体。
  • 测试主题,可以用 :AirlineTheme
  • 只显示一个标签页时,没必要打开标签的显示,可以让它自动关闭
    打开 ./vim/bundle/vim-airline/autoload/airline/extensions/tabline/autoshow.vim ,
    将其中的set showtabline=2统统改为 set showtabline=1
    或者,在vimrc中加上autocmd VimEnter * set showtabline=1 也可实现同样效果。
  • airline-molokai主题的tabline颜色对比度太高,而且一个是银灰色tab ,其他是高亮黑色tab,空余空间是蓝紫色, 都过于显眼, 所以不好区分。 修改为,当前tab为蓝紫色,非当前tab为浅灰色,其他空余空间为深灰色接近背景色。
    打开 ~/.vim/bundle/vim-airline-themes/autoload/airline/themes/molokai.vim
    在Inactive块之后,"CtrlP之前添加:
    " tabline
    let g:airline#themes#molokai#palette.tabline = {
    'airline_tab': ['#f8f8f0' , '#232526' , 253 , 238 , '' ],
    'airline_tabsel': ['#080808' , '#e6db74' , 232 , 67 , '' ],
    'airline_tabtype': ['#080808' , '#fd971f' , 232 , 208 , '' ],
    'airline_tabfill': ['#f8f8f0' , '#465457' , 253 , 236 , '' ],
    'airline_tabmod': ['#080808' , '#66d9ef' , 232 , 81 , '' ],
    'airline_tabhid': ['#f8f8f0' , '#465457' , 144 , 16 , ''],
    }

4d3b838cc39f150a28c91710eab04d3e.png

19. c语言解析增强

  • 参考 https://github.com/vim-scripts/std_c.zip
  • 打开 ~/.vim/bundle/std_c.zip/syntax/c.vim +916 添加下面一行
    syntax match cBracket "[{}()[]]"
    可用来在随后的vim着色方案文件中对c括号的配色进行设定
  • CSyntaxafter插件和多个插件冲突,不要使用。

20. python语言解析文件增强

如果用Vim8,可忽略此条。

21. systemverilog语言解析增强

  • 参考 https://github.com/WeiChungWu/vim-SystemVerilog
  • 相对好用,且自带snippets文件。
  • 虽然文件里给了不同indent方案的设置,但是实际不可行,只能是4-4-4缩进,而我想用2-4-4自动缩进,此问题使用snippets缓解。
  • 会和不包括本文描述的某些插件冲突,所以可能需要用户手动修改部分源码以兼用,此处不赘言。

22. vim配色方案

  • 自己手写配色指定,灵感来源是Touhou里人物的配色。
  • 仍然未全部妥善覆盖,因为只是自己用所以懒得一次性改好。
  • 部分效果如下

systemverilog语法_Vim for Verilog/Systemverilog_第2张图片

systemverilog语法_Vim for Verilog/Systemverilog_第3张图片

23. vim调试

  • 以上插件的使用已在ubuntu18.04lts测试通过
  • 其他(略)

24. 弃用的插件

  1. vim-signature ,手动标记跳转,不常使用。
  2. ListToggle, 管理locationlist效果不佳。
  3. vim_markdown,vim敲中文总是感觉怪怪的。
  4. fcitx vim中英文混合输入管理,vim中英文混合输入操作方式本身引起不舒适。
  5. vim-indent-guides缩进提示, 空行显示中断缺陷多年未解决。
  6. ctrlp模糊搜索,陈旧缺维护。
  7. tabular,已选择使用vea。
  8. YouCompleteMe 代码补全,写verilog,YCM不见得比轻量级的补全好。
  9. Syntastic 语法检查,ale使用起来体验更好,推荐在保存时做检查。
  10. ctrlsf, 不常使用,可在终端中使用ag替代。
  11. DoxygenToolkit,使用不方便,不如自己写脚本。
  12. undotree,后悔药,不常使用。
  13. a.vim, h和c文件间切换,不常用。
  14. vim-surround,不常用。
  15. hdima/python-syntax,已过期。

27. 后记

业界对于C/C++和Python等热门语言,有很多优秀的IDE/Editor支持,包括但不限于VSCode,PyCharm等;但是verilog/systemverilog却一直没有什么堪称智能点的文本编辑器; 考虑到vim的灵活性和插件的多样性全面性,可以用vim搭一个编辑器;如果能达到书写直接表达自己心中所想,一气呵成,而没有中断(比如去拿鼠标点击拖动),无疑是令人愉快的体验。

没有详细的流程,只是作为一个纲要。有时间的人士比如学生,可以花3个月手动全面学习Vim使用,本文可以作为一种特定配置的素材,作为搭建自己轻量级Editor的一种参考,这是本文的意义所在。

你可能感兴趣的:(systemverilog语法)