quickfix和vhdl编译
今天学习了一下网上down的一篇文章,vim使用进阶。作者仍然是一个c编程员,不过内容很不错,基本上各个方面都包括了。
看到里面的“vim使用进阶:剑不高手 – quickflx”这一节,感觉对我实现vhdl的编译有很大的帮助。于是几经尝试,终于算是有所小成了。好吧,下面从头到尾梳理一遍:
所谓 quickfix 模式,它和 Normal 模式、 Insert模式没什么关系,它只是一种加快你开发速度的工作方式。
Quickfix 模式的主要思想是保存一个位置列表,然后提供一系列命令,实现在这个位置列
表中跳转。
想要使用Quickfix,首先得编译文件才行。那么第一步就是如何编译文件了。
如果是c文件,那就比较方便,直接用make命令就可以(我估计),实在不行,各种文章页都有介绍。那么现在怎么设置用modelsim的vcom命令来编译呢?
第一步,还是先设置环境变量吧,将$modelsim\win32加入PATH环境变量,一般安装了modelsim都会默认有这个。
第二步,设置用make来编译vhdl。要实现这个,就必须要改makeprg的值了。
"设置编译命令 set makeprg=vcom\ -work\ work\ %
设置好后,就可以使用:make命令直接编译了。
输入:make编译,在下方就会出现编译的信息了,如果文件正确的话,如下所示:
现在我们的编译后输出的信息就被加入到一个临时的文件里,quickfix可以查看这些错误信息:
在 quickfix 模式里经常用到的命令有:
:cc 显示详细错误信息 ( :help :cc )
:cp 跳到上一个错误 ( :help :cp )
:cn 跳到下一个错误 ( :help :cn )
:cl 列出所有错误 ( :help :cl )
执行:cl命令可以看到全部的编译信息:
点击回车后,文件立刻就变成空白了:
其原因,不能判断相应的错误。
这就需要我们设置错误识别。
第三步,设置modelsim_vcom的错误识别:
"设置vhdl的错误识别 set errorformat=\*\*\ %tRROR:\ %f(%l):\ %m,\*\*\ %tRROR:\ %m,\*\*\ %tARNING:\ %m,\*\*\ %tOTE:\ %m,%tRROR:\ %f(%l):\ %m,%tARNING\[%*[0-9]\]:\ %f(%l):\ %m,%tRROR:\ %m,%tARNING\[%*[0-9]\]:\ %m
这个设置好后,应该可以识别出错误了,执行:make后,光标自动跳转到第一个错误的行。
用:cl命令可以查看全部错误信息。
用:cope可以在新的分割窗口查看错误信息。双击相应的错误提示,可以跳转到相应的行。
第四步,现在已经实现了用vim直接编译,并查看错误,并且可以直接跳转到相应的行。基本功能可以算是实现了。为了方便使用,再设置个快捷键,将F7设置为编译本文件:
"编译一个vhdl文件 nmap <silent> <F7> <Esc>:make<CR>:cw<CR>
其中:cw命令的含义是如果有错误就打开quickfix,没错误就不打开。
另外,建立库还是需要另外设置的,否则第一次编译不会通过。
"建立一个库 nmap <F6> <Esc>:!vlib work<CR>
下面将所有的vimrc设置列在下面:
"建立一个库 nmap <F6> <Esc>:!vlib work<CR> "编译一个vhdl文件 nmap <silent> <F7> <Esc>:make<CR>:cw<CR> "设置编译命令 set makeprg=vcom\ -work\ work\ % "设置modelsim_vcom的错误识别 set errorformat=\*\*\ %tRROR:\ %f(%l):\ %m,\*\*\ %tRROR:\ %m,\*\*\ %tARNING:\ %m,\*\*\ %tOTE:\ %m,%tRROR:\ %f(%l):\ %m,%tARNING\[%*[0-9]\]:\ %f(%l):\ %m,%tRROR:\ %m,%tARNING\[%*[0-9]\]:\ %m
其他有用的命令:
:cw 如果有错误列表,则打开 quickfix 窗口 ( :help :cw )
:col 到前一个旧的错误列表 ( :help :col )
:cnew 到后一个较新的错误列表 ( :help :cnew )
:ccl 关闭quickfix窗口