数字IC设计开发Gvim配置

插件傻瓜包安装说明

推荐使用git clone获取:
GitHub - RongyeL/ryGvim: my gvim config and plugin
将ryGvim目录下的.vim文件夹和.vimrc文件,移到用户根目录下,即可使用。

如果不会使用git,也可以直接在GitHub先下载zip,然后再拖到虚拟机中使用。
windows也是可以用的,但是配置文件不一样,好像是_vimrc这样的文件,所以需要做一些调整。

仅支持Gvim 8.0以上版本,基于VIM 8 pack特性进行插件管理。
不再需要gvim支持python环境。

以下插件,ale需要补充安装iverilog才能进行语法检查。
ctags也需要另外安装
如果是Ubuntu,跟我一样的版本。使用同样的阿里源。
应该可以直接使用sudo apt install ctags 完成安装。

名称 功能 git clone链接
nerdtree 文件目录树 https://github.com/preservim/nerdtree.git
nerdcommenter 快速注释 https://github.com/preservim/nerdcommenter.git
vim-airline 状态栏美化 https://github.com/vim-airline/vim-airline.git
vim-snippets 代码片段库 https://github.com/honza/vim-snippets.git
vim-snipmate 代码片段展开 https://github.com/garbas/vim-snipmate.git
vim-addon-mw-utils vim-snipmate依赖插件 https://github.com/MarcWeber/vim-addon-mw-utils.git
tlib_vim vim-snipmate依赖插件 https://github.com/tomtom/tlib_vim.git
vim-easy-align 代码对齐 https://github.com/junegunn/vim-easy-align.git
neocomplcache 代码补全 https://github.com/Shougo/neocomplcache.vim.git
auto-pairs 自动配对括号 https://github.com/jiangmiao/auto-pairs.git
ale 语法检查 https://github.com/dense-analysis/ale.git
gruvbox 色彩空间 https://github.com/morhetz/gruvbox.git
indentLine 缩进标识 https://github.com/Yggdroot/indentLine.git
vlog_inst_gen Verilog自动例化 https://github.com/vim-scripts/vlog_inst_gen.git
ctags ctags模块标签 使用sudo apt install ctags 命令直接安装 官网:Exuberant Ctags

各插件使用说明

nerdtree文件目录树

配置信息

常用命令

按F5展开/关闭目录树
光标移动到需打开的文件,
o:打开到当前窗口
t:打开并新建标签页到当前窗口,

nerdcommenter快速注释

配置信息

常用命令

,cc:注释
,cu:取消注释
,c<空格>:最常使用的操作,可以自动判断是注释还是取消注释
,cA:注意是大写A,也就是shift+a,在行末添加注释

vim-airline状态栏美化


就是下面的状态栏美化,没有做任何调整。

vim-snippets代码片段库


在该路径下找到verilog的代码片段仓库,添加自己的代码块。
如图,这里简单加了一个shixu的snippet。

vim-snipmate代码片段展开

相关配置

常用命令

如上,在vim-snippets代码片段库中添加了一个shixu的代码
在输入shixu后,按tab即可展开该代码片段。

vim-easy-align代码对齐

相关配置

常用命令

比较简单的对齐插件,
一般依据“空格”、“逗号,”“等号=”来完成代码对齐
选中对齐的代码后,输入ga+“对齐依据”
建议不要全选代码对齐,效果不好。
小范围对齐即可。
如下,先根据“=”进行对齐,再根据“,”进行对齐。
自己再手动调整一下就好。

neocomplcache代码补全

相关配置

常用命令

此处的代码补全和上面的代码片段不是一个含义。
这里的补全,会根据缓存信息,判断你需要输入的内容是什么。
除了代码外,路径之类的也是可以补全的。
输入部分内容,会自动展开补全列表,
ctrl+n下移,回车确定补全。

auto-pairs自动配对括号

输入括号时自动成对出现。

ale语法检查

相关配置


注意,需要补充安装iverilog才能使用
Ubuntu下可以直接用命令安装,
centos可能需要下载源文件安装。
除了iverilog,还有其他语法工具可以使用,详见插件github。

gruvbox色彩空间

自己调整过的色彩方案,如果想自己搞可以看看我之前的视频。
没啥用的小技巧 - Gvim自定义色彩方案_哔哩哔哩_bilibili
建议不要花太多时间,看的顺眼就行。

indentLine缩进标识

比较容易判断缩进情况,以4个空格为一个缩进单位。

vlog_inst_genVerilog自动例化

相关配置

常用命令

,ig,生成当前文件的例化文件,会自动存储到剪贴板中。
按esc退出冒出的信息,在需要例化的地方粘贴代码

ctags模块标签

相关配置


该功能其实不是一个插件,
需自行安装ctags,
Ubuntu下可以命令直接安装
sudo apt install ctags

常用命令

gi:进入光标所在未知的模块端口
go:退出到上一级模块

.vimrc配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
"-----------------------------------------------------------------------------
" basic configuration
"-----------------------------------------------------------------------------
syntax on " syntax highlight
filetype plugin indent on " plugins and indentation based on file type

set hlsearch " search highlight
set ignorecase " ignore search case

set cuc " current column highlight
set cul " current line highlight

set nu " show line number

set fileencoding=utf-8 "prevent garbled characters
set fenc=utf-8
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936,big-5
set enc=utf-8
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
let &termencoding=&encoding

set guifont=Monospace\ 12 " set font

set tabstop=4 " set tab to 4 spaces
set expandtab
set shiftwidth=4 "set auto-indent to 4 spaces
set softtabstop=4 " set the back key to delete 4 spaces

set ruler " set show ruler

set smartindent " set smart auto-indent

set showcmd " show command
set autochdir " auto-swith working directory

winpos 235 235 " set windows position
set lines=40 columns=108 " set windows size

set nocompatible " remove vi consistency

"-----------------------------------------------------------------------------
" customize shortcut keys
"-----------------------------------------------------------------------------
imap ii <ESC>
nmap ww :w<CR>
nmap qq :q<CR>
nmap fd *

let mapleader = ","

"-----------------------------------------------------------------------------
" plugin: NERDTree
"-----------------------------------------------------------------------------
map <leader>ne :NERDTreeToggle<CR>
let g:NERDTreeWinSize = 25 " set nerdtree size
let NERDTreeIgnore=['\.pyc','\~$','\.swp'] " ignore the display of the following files
let NERDTreeShowHidden=1 " show hidden files
let g:NERDTreeDirArrowExpandable = '▸' " modify the default arrow symbol
let g:NERDTreeDirArrowCollapsible = '▾'
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
" nerdtree hot key mapping
map <F5> :NERDTreeMirror<CR>
map <F5> :NERDTreeToggle<CR>
map <leader>f :NERDTreeFind<CR>

"-----------------------------------------------------------------------------
" plugin: airline
"-----------------------------------------------------------------------------
let g:airline_theme='base16_gruvbox_dark_hard'

"-----------------------------------------------------------------------------
" plugin: indentline
"-----------------------------------------------------------------------------
let g:indentLine_enable = 1
let g:autopep8_disable_show_diff=1
let g:indentLine_char_list = ['|', '¦', '┆', '┊']

"-----------------------------------------------------------------------------
" plugin: easyalign
"-----------------------------------------------------------------------------
" Start interactive EasyAlign in visual mode (e.g. vipga)
xmap ga <Plug>(EasyAlign)
" Start interactive EasyAlign for a motion/text object (e.g. gaip)
nmap ga <Plug>(EasyAlign)

"-----------------------------------------------------------------------------
" plugin: neocomplcache
"-----------------------------------------------------------------------------
let g:neocomplcache_enable_at_startup = 1 " auto start neocomplcache
let g:neocomplcache_enable_auto_select = 1 " auto select the first item in the list
let g:neocomplcache_min_syntax_length = 2 " Set minimum syntax keyword length.
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
" inoremap <expr><CR> neocomplcache#smart_close_popup() . "\<CR>"
inoremap <expr><C-Y> neocomplcache#close_popup()
inoremap <expr><space> neocomplcache#undo_completion()
inoremap <expr><Enter> pumvisible() ? "\<C-Y>" : "\<Enter>"

"-----------------------------------------------------------------------------
" plugin: gruvbox
"-----------------------------------------------------------------------------
set bg=dark
colorscheme gruvbox

"-----------------------------------------------------------------------------
" plugin: nerdcommender
"-----------------------------------------------------------------------------
" my key: ,cl /,cc /,cu /,c<space>
let g:NERDSpaceDelims = 1 " add space after comment

"-----------------------------------------------------------------------------
" plugin: ale
"-----------------------------------------------------------------------------
"keep the sign gutter open
let g:ale_sign_column_always = 1
let g:ale_sign_error = '>>'
let g:ale_sign_warning = '--'
" show errors or warnings in my statusline
let g:airline#extensions#ale#enabled = 1
" use quickfix list instead of the loclist
let g:ale_set_loclist = 0
let g:ale_set_quickfix = 1
" only enable these linters
let g:ale_linters = {
\ 'verilog': ['iverilog']
\}
nmap <silent> <C-k> <Plug>(ale_previous_wrap)
nmap <silent> <C-J> <Plug>(ale_next_wrap)

"-----------------------------------------------------------------------------
" plugin: ctags
"-----------------------------------------------------------------------------
nmap gi <C-]> " go into instance module or output port
nmap go <C-o> " go out to upper stage


"-----------------------------------------------------------------------------
" plugin: vlogInst
"-----------------------------------------------------------------------------
so ~/.vim/pack/default/start/vlog_inst_gen/vlog_inst_gen.vim " set path

" key: (,ig)

"-----------------------------------------------------------------------------
" plugin: snipmate
"-----------------------------------------------------------------------------
imap <tab> <Plug>snipMateTrigger " tab expand code snippets
imap <tab> <Plug>snipMateNextOrTrigger
imap <C-tab> <Plug>snipMateShow " tab expand code snippets list

"-----------------------------------------------------------------------------
" auto add file header when create new file
"-----------------------------------------------------------------------------
autocmd BufNewFile *.v,*.sv,*.cpp,*.c,*.h exec ":call AddHeader()"
autocmd BufWrite *.v call UpdateLastModifyTime()

function s:GetUserName()
let user_name = "Rongye"
return user_name
endfunction

function AddHeader()
let line = getline(1)
let filename = expand("%")
call append(0, "// +FHDR----------------------------------------------------------------------------")
call append(1, "// Copyright (c) ".strftime("%Y ") )
call append(2, "// ALL RIGHTS RESERVED")
call append(3, "// ---------------------------------------------------------------------------------")
call append(4, "// Filename : ".filename)
call append(5, "// Author : ".s:GetUserName())
call append(6, "// Created On : ".strftime("%Y-%m-%d %H:%M"))
call append(7, "// Last Modified : ")
call append(8, "// ---------------------------------------------------------------------------------")
call append(9, "// Description : ")
call append(10, "//")
call append(11, "//")
call append(12, "// -FHDR----------------------------------------------------------------------------")
endfunction
"-----------------------------------------------------------------------------
" auto update file header modifyTime if write
"-----------------------------------------------------------------------------
function UpdateLastModifyTime()
let line = getline(8)
if line =~ '// Last Modified'
call setline(8,"// Last Modified : " . strftime("%Y-%m-%d %H:%M"))
endif
endfunction



数字IC设计开发Gvim配置
https://rongyel.github.io/posts/f60848c2.html
作者
Rongye
发布于
2024年7月6日
许可协议