使用gvim查看文件的时候,常会遇到需要跳转到子函数文件的情况。当子函数文件不在当前目录时就需要重新去找到文件路径,再打开,比较麻烦。
使用vim插件,提前加载文件目录,只需要输入文件名就可以查看文件
以verilog文件来举例,打开子module文件
使用python完成加载path.list,获取module name以及打开文件
import sys
import os
import re
import vim
pat_inst_name = re.compile("^(?P<blen>\s*)(?P<mname>\w+)")
def get_dir_list():
fp = open("./path.list", "r")
vim.command("let g:asPathList=[]")
for item in fp.readlines():
vim.command("let g:asPathList=add(g:asPathList, '%s')"%(item.strip()))
vim.command("let g:asPathList=add(g:asPathList, '%s')"%(os.path.abspath("./")))
fp.close()
def get_module_name():
objMname = pat_inst_name.search(vim.current.line)
mname = ""
if objMname is not None:
mname = objMname.group("mname")
else:
print("ERROR: can't find module name in current line")
return mname
def open_file(mname):
pathList = vim.eval("g:asPathList")
for item in pathList:
fpath = os.path.join(item, mname+".v")
if os.path.exists(fpath) is True:
vim.command(":sp %s"%(fpath))
break
使用autosplit.vim调用python函数
nmap ;sp :call AutoSplit() <Enter>
function! AutoSplit(...)
python3 << EOF
import os
import sys
import vim
vpath = "/home/user/.vim/plugin" #vim path
if vpath not in sys.path:
sys.path.append(vpath)
import autosplit
listArgs = vim.eval("a:000")
flag = listArgs[0] if len(listArgs) > 0 else ""
if flag == "#init#":
autosplit.get_dir_list()
else:
mname = autosplit.get_module_name()
if mname != "":
autosplit.open_file(mname)
EOF
endfunction
call AutoSplit("#init#")
在module name上normal模式用“;sp”即可打开对应文件
|