前段时间请求IT把Linux服务器上的vim升级到vim7.4,一个想法是可以用vim7.0之后加入的特性gF,可以实现跳转到光标所在文件的指定行,如果文件名后面跟着行号的话。这个命令很高效,不用记下行号,gf,然后输入行号,而是直接gF一步到位。
然而仿真verilog的常用工具VCS和NC在给出的编译信息中,文件名和行号的组合格式却不尽相同,gF时灵时不灵,不能处理所有的情景。
因此Google了一把,发现原来早在vim7.0推出之前,就有人通过vim函数实现了gF。于是copy下来,针对VCS和NC的特定格式做了修改,还挺好用。从网络来,到网络去,发出来分享。
把下面这段粘贴到你的.vimrc里。在编译报告中有文件名的地方,输入gf,就可以跳转到verilog文件的指定行了。
新浪播客里面怎么添加代码啊?下面的代码被处理的不像样了,有些字符也没有了。容我研究一下。。。研究的结果是抓张图上来吧!!!!!!
(微信公众号貌似智能一些,粘贴代码不做手脚!赞腾讯一个,鄙视渣浪!)
V司的同事可以直接到我的.vimrc里面copy。
function! GotoFileWithLineNum()
" exclude comma from file name search
" change the 'isfname' option temporarily to pick up file name in ncverilog MSG
let bak_isfname = &isfname
set isfname=@,48-57,/,.,-,_,+,#,$,%,~,="
" filename under the cursor
let file_name = expand('<cfile>')
if !strlen(file_name)
echo 'NO FILE UNDER CURSOR'
return
endif
" look for a line number separated by any :,"<space>
if search('\%#\f*[:, "]*\zs[0-9]\+')
" change the 'iskeyword' option temporarily to pick up just numbers
let temp = &iskeyword
set iskeyword=48-57
let line_number = expand('<cword>')
exe 'set iskeyword=' . temp
endif
exe 'set isfname=' . bak_isfname
" edit the file
exe 'e '.file_name
" if there is a line number, go to it
if exists('line_number')
exe line_number
endif
endfunction
map gf :call GotoFileWithLineNum()<CR>
map gsf :sp<CR>:call GotoFileWithLineNum()<CR>
最后吐槽一下Synopsys的VCS,一个软件里面警告的格式竟然不统一,有的带双引号,有的不带!NC的貌似扩展性更强,不但在文件名后附带行号,还附带列号!