在linux平台上,生成lookupfile的tag文件,采用如下的shell命令:
#!/bin/sh
echo -e '!_TAG_FILE_SORTED/t2/t/2=foldcase/' > filenametags
find . -not -regex '.*/./(png/|gif/)' -type f -printf "%f/t%p/t1/n" | sort -f >> filenametags
翻译成windows平台上的shell命令,大致为:
dir /B /S /A-D /ON *.fnc *.prc *.trg *.pck *.typ *.spc *.bdy *.tps *.tpb *.txt *.sql > filenametags dir /B /S /A-D /ON | findstr /V ".class$ .xls$ .doc$ .ppt$ .pdf$ .jpg$ .gif$ .zip$ .rar$ .jar$ .dat$ .mdb$ .dmp$ " > filenametags
但这样最终输出的tag文件还不复合lookupfile的tag文件格式要求(文件名+tab键+文件全路径+tab键+数字1),所有还需要再处理一下,这里采用的一个办法是使用vim内嵌函数的方法,所以需要继续处理一下,这里贴出一段vim脚本,写到_vimrc文件中后每次启动vim后加载,
然后调用call ProjectTagUpdateLookupFile()方法(或map一个命令)即可刷新tag文件了。
其中参考了happyvim(水木bbs的vim版)编写的project.vim插件代码,在此表示感谢。
" Lookup File " Author: happyvim " Function: ProjectTagUpdateLookupFile " Args: " Description: regenerate lookupfile tags function! ProjectTagUpdateLookupFile() echo "generate lookupfile.tag" if filereadable(g:project_lookup_file) call delete(g:project_lookup_file) endif execute "cd " . g:this_project_base_dir let l:lookup_tags = ["!_TAG_FILE_SORTED 2 //2=foldcase//"] if has("win32") let l:this_project_base_dir = substitute(g:this_project_base_dir, "/", "//", "g") . "//" else let l:this_project_base_dir = g:this_project_base_dir endif "let l:lookup_tags_file_string = system(g:project_find_program . " " . l:this_project_base_dir . " " . g:project_find_param) let l:lookup_tags_file_string = system(g:project_find_program . " " . g:project_find_param) let l:lookup_tags_file_list = split(l:lookup_tags_file_string, '/n') let l:lookup_tags_file_list = sort(l:lookup_tags_file_list) let l:item = "" let l:count = 0 for l:item in l:lookup_tags_file_list let l:item = fnamemodify(l:item, ':t') . "/t" . l:item . "/t" . "1" let l:lookup_tags_file_list[l:count] = l:item let l:count = l:count + 1 endfor call extend(l:lookup_tags, l:lookup_tags_file_list) call writefile(l:lookup_tags, g:project_lookup_file) echo "generate lookupfile tag done" endfunction "dir /B /S /A-D /ON *.fnc *.prc *.trg *.pck *.typ *.spc *.bdy *.tps *.tpb *.txt *.sql > filenametags "dir /B /S /A-D /ON | findstr /V ".class$ .xls$ .doc$ .ppt$ .pdf$ .jpg$ .gif$ .zip$ .rar$ .jar$ .dat$ .mdb$ .dmp$ " > filenametags let g:project_lookup_file = "D:/Harvest/filenametags" let g:project_find_program = "dir /B /S /A-D /ON" let g:project_find_param = "*.fnc *.prc *.trg *.pck *.typ *.spc *.bdy *.tps *.tpb *.txt *.sql" let g:this_project_base_dir = "D:/Harvest" let g:LookupFile_TagExpr = '"D:/Harvest/filenametags"'