vim使用的verilog插件(包括补全,纠错)
vim的verilog补全插件更新(支持变量名补全)-CSDN博客
vim使用的verilog补全插件(即插即用)_vim verilog插件-CSDN博客
利用verilator实现vim对Verilog代码实时纠错功能-CSDN博客
本文是以上三篇文章的后续,同时新增了很多插件的功能
功能汇总
这个插件下,vim被分成了纠错模式和浏览模式。
补全功能在两种模式种通用。
纠错模式下,提供纠错功能,用于编写代码使用。
浏览模式下,vim会显示多样的信息,并且提供快速跳转功能,用于修改代码和阅读代码。
进入时默认纠错模式,按下<C-e>在两种模式之间切换。
补全功能
补全功能提供模块端口补全,代码补全,变量和参数补全。同时具有简单的判断功能,会根据光标所在位置判断可能的补全选项,筛选补全内容
补全代码
补全module
模块补全的时候,当行首为模块名,后面输入的内容自动接入端口名
纠错模式功能
纠错模式提供quickfix和显示错误功能,按下<C-c> 打开/关闭 错误汇总端口,打开端口后按上下键选中错误,按下回车可以快速跳转错误位置。当光标移动至错误高亮行左右两格内时,自动显示错误信息。
纠错
浏览模式功能
浏览模式提供丰富的信息和跳转功能
按下<C-c>,quickfix窗口显示所有模块的位置,通过选择加回车快速跳转
全部函数跳转
当你的光标置于模块名称上是,popup出现提示,之后按下<C-j>可以快速跳转,按下<C-k>回到上一次跳转的位置
模块跳转
当光标位于变量名称上方时,显示变量的信息,包括变量类型,从哪些模块输入输出,自定义备注
请注意,如果你要显示自定义备注,请将备注用/* */的备注形式接在变量定义处的后方,同时需要接在逗号或者分号的前面,如果你不需要显示自定义备注,就接在逗号或者分号后方。
变量显示
当光标位于变量上方时,quickfix可以用于跳转到变量输入输出的函数端口位置
变量端口跳转
(注意,当你的光标从变量端口移开后,全局函数跳转需要按下<C-s>才能打开)
当你的代码没有报错时,按下<C-b>可以自动整理代码。
整理
安装说明
需要的配置
代码需要从github安装,安装前,请你先安装或设置以下内容。
1:确保你的终端是fish shell,如果不是请你改成fish shell或保证你的终端可以执行fish shell功能
2:安装verilator,这是一个开源的仿真工具,纠错模式需要用到它的功能
你可以在以下链接安装,我的版本是5.008,你可以使用其他版本,但是我不保证纠错模式能 正常运行
Installation — Verilator Devel 5.031 documentationInstallation — Verilator Devel 5.031 documentation
3:下载verible插件库中的verible-verilog-format插件,并且置于系统文件夹下,确保插件可以执行
Releases · chipsalliance/verible · GitHub
你可以在这个链接安装适合你系统的版本,解压后在bin文件夹里面找到这个插件,置于你的系统文件夹下
安装过程
在你的主界面的.vim/plugin 文件夹执行以下代码,如果你没有这个文件夹,在主界面创建它,你需要保证你的vim可以识别这个文件夹
git clone git@github.com:kaifengwu/vim_verilog_plugin.git
mv vim_verilog_plugin/ verilog_function/
cd verilog_function/plugin/
之后打开你所在文件夹的configuration.vim文件,你会看到以下内容
"---------------------------辅助配置------------------------------
"智能按键操作
autocmd FileType * inoremap } <ESC>:call Quotation4()<cr><ESC>
autocmd FileType * inoremap ' '<ESC>:call Quotation3()<cr><ESC>
autocmd FileType * inoremap > <ESC>:call Quotation2()<cr><ESC>
autocmd FileType * inoremap " <ESC>:call Quotation1()<cr><ESC>
"自动补全括号
autocmd FileType * inoremap ) )<ESC>i
autocmd FileType * inoremap ] ]<ESC>i
"特殊按键映射
"保存功能
autocmd FileType * map <C-s> :cexpr[]<CR>:cclose<CR>:w<CR>
autocmd FileType * inoremap <C-s> <ESC>:cexpr[]<CR>:cclose<CR>:w<CR>l
"保存并退出
autocmd FileType * map <C-q> <ESC>:cclose<CR>:wq<CR>
autocmd FileType * inoremap <C-q> <ESC>:wq<CR>:cexpr[]<CR>:q<CR>
"打开/关闭quickfix端口
autocmd FileType * map <C-c> <ESC>:call Window()<CR>
autocmd FileType * inoremap <C-c> <ESC>:call Window()<CR>
"快速切换括号功能
autocmd FileType * inoremap <C-l> <ESC>:call JumpToClosingParen(1)<CR>la
autocmd FileType * map <C-l> :call JumpToClosingParen(1)<CR>l
autocmd FileType * inoremap <C-h> <ESC>:call JumpToClosingParen(0)<CR>li
autocmd FileType * map <C-h> :call JumpToClosingParen(0)<CR>l
"以下注释掉的内容放到.vimrc里面去
"设置更新时间,防止光标一直跳转
"set updatetime=500
"使用alt键恢复部分普通模式功能
"插入模式下按下alt恢复hjkl的上下左右功能
"execute "set <M-h>=\eh"
"inoremap <M-h> <Left>
"execute "set <M-j>=\ej"
"inoremap <M-j> <Down>
"execute "set <M-k>=\ek"
"inoremap <M-k> <Up>
"execute "set <M-l>=\el"
"inoremap <M-l> <Right>
"imap <A-h> <Left>
"imap <A-j> <Down>
"imap <A-k> <Up>
"imap <A-l> <Right>
"o键打开下一行
"execute "set <M-o>=\eo"
"inoremap <M-o> <ESC>o
"noremap <M-o> <ESC>o
"黏贴
"execute "set <M-p>=\ep"
"inoremap <M-p> <ESC>pa
"删除光标所在位置单词
"execute "set <M-w>=\ew"
"inoremap <M-w> <ESC>ebdei
"nnoremap <M-w> <ESC>ebde
"注释
"noremap <C-x> <ESC>^:call Annotate()<cr><ESC>
"inoremap <C-x> <ESC>^:call Annotate()<cr><ESC>
"智能换行
"inoremap <C-j> <ESC>^$:call Newline()<cr><ESC>
"noremap <C-j> <ESC>^$:call Newline()<cr><ESC>
"autocmd FileType * set guicursor=n-v-c:block,i-ci-ve:ver5,r-cr-o:hor20
"以上内容注释掉之后放到.vimrc里面
"----------------------Verilog 相关的配套设置-----------------------------
autocmd FileType verilog setlocal shiftwidth=4 softtabstop=4
"在保存 .v 文件时运行 verilator 并加载错误到 Quickfix 窗口
autocmd BufWritePost *.v silent call LoadQuickfixMessage()
au BufRead,BufNewFile *.v set filetype=verilog
autocmd FileType verilog map <C-e> :call ModuleChange()<CR>
autocmd FileType verilog inoremap <C-e> <ESC>:call ModuleChange()<CR>
autocmd FileType verilog map <C-b> :call Verilogformat()<CR>
autocmd FileType verilog inoremap <C-b> <ESC>:call Verilogformat()<CR>
"把这一行的问号?换成你vim所在文件夹的绝对路径
"autocmd VimEnter *.v : LoadCompletionFile /?/.vim/plugin/verilog_function/verilog.txt
autocmd VimEnter *.v : call LoadMoudlesFromFile(0)
"设置补全操作快捷键
"如果你使用coc-nvim,使用底下的这几个映射
autocmd FileType verilog inoremap <silent><expr> <TAB>
\ TriggerAutoComplete(0) ? "\<C-n>" :
\ coc#pum#visible() ? coc#pum#next(1):
\ CheckBackspace() ? "\<Tab>" :
\ coc#refresh()
autocmd FileType verilog inoremap <expr> <S-TAB>
\ TriggerAutoComplete(0) ? "\<C-p>" :
\coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
autocmd FileType verilog inoremap <silent><expr> <CR>
\ TriggerAutoComplete(0) ? "\<C-y>\<space>" :
\coc#pum#visible() ? coc#_select_confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
"如果你不使用coc-nvim,把上面的映射注释掉然后改成底下的这几个
"autocmd FileType verilog inoremap <silent><expr> <TAB>
"\ TriggerAutoComplete(0) ? "\<C-n>" : "\<Tab>"
"autocmd FileType verilog inoremap <expr> <S-TAB>
"\ TriggerAutoComplete(0) ? "\<C-p>" : "\<C-h>"
"autocmd FileType verilog inoremap <silent><expr> <CR>
"\ TriggerAutoComplete(0) ? "\<C-y>\<space>" : "\<CR>"
autocmd CursorHold *.v silent call AutoLoadCompeletion()
\| call ShowPopup()
autocmd FileType verilog inoremap <silent><expr> <C-j> g:JUMP? "<ESC>:call JumpToModule(1)<cr>zz" : "<ESC>^$:call Newline()<cr><ESC>"
autocmd FileType verilog map <silent><expr> <C-j> g:JUMP? "<ESC>:call JumpToModule(1)<cr>zz" : "<ESC>^$:call Newline()<cr><ESC>"
autocmd FileType verilog map <C-k> <ESC>:call JumpToModule(0)<cr>zz
autocmd FileType verilog inoremap <C-k> <ESC>:call JumpToModule(0)<cr>zz
"补全相关设置
autocmd FileType verilog set autowrite
autocmd FileType verilog set wildmode=full
autocmd FileType verilog set wildmenu
autocmd FileType verilog set completeopt=menuone,noinsert,noselect,preview
autocmd FileType verilog set pumheight=10
" 设置补全菜单背景为灰色,前景为黑色
autocmd FileType verilog highlight Pmenu ctermbg=black ctermfg=grey
" 设置补全菜单中选中项的背景为红色,前景为白色
autocmd FileType verilog highlight PmenuSel ctermbg=red ctermfg=white
" 设置滚动条背景为浅灰色
autocmd FileType verilog highlight PmenuSbar ctermbg=lightgray
" 设置滚动条的滚动指示部分为深灰色
autocmd FileType verilog highlight PmenuThumb ctermbg=darkgray
"---------------------------------------------------------------------------
接下来进行以下操作
把中间注释掉的映射复制到.vimrc里面,并且去掉注释,确保你的映射不会和现有的冲突
找到文件中‘verilog相关配置’这个部分,找到以下代码
"把这一行的问号?换成你vim所在文件夹的绝对路径
"autocmd VimEnter *.v : LoadCompletionFile /?/.vim/plugin/verilog_function/verilog.txt
把问号换成你.vim所在文件夹的绝对路径,然后把这行的注释去掉
之后你就可以愉快的开始补全了
快捷键功能使用介绍
alt恢复功能
在插入模式下,按下alt键(不要松开),接下来按下h,j,k,l,o,p,这些按键的功能会恢复(光标上下左右移动,开新行,黏贴)
同时alt+w会删除光标所在位置的单词
Ctrl功能
<C-s>保存,同时你可以拿来当ESC键使用
<C-q>保存并退出
<C-c>打开关闭quickfix窗口(有时候一次关不掉就按两次)
<C-e>切换纠错模式和浏览模式,按下后窗口底下的框显示"Display Message"是浏览模式,显示“Display Error”是纠错模式
<C-l>向右跳入,跳出括号
<C-h>向左跳入,跳出括号
(这俩功能在函数端口补全的时候很有用,你可以写完一个端口之后按两下,就可以跳入下一个端口开始写。请注意,只能在同一行跳跃)
<C-j>智能回车键,当前文提到的跳转显示出来的时候作为跳转功能,没显示出来的时候会自动识别行末尾的分号,如果没有分号的话会添加分号并且开启新一行
(这个功能在写c的时候比较有用,你写printf里面的内容之后就不需要跳到行末,加上分号,然后再按回车)
<C-k>跳回你上一次使用<C-j>或者<C-k>跳转的位置
<C-x> 类似vscode中的注释键,自动在函首添加或去掉注释
安装和使用过程中的问题欢迎在底下反馈,我有空会尽量解答
这个插件是博主第一次写vim插件,目前没有大量使用,欢迎各位大佬批评指正,也欢迎大家反馈bug

更多推荐

所有评论(0)