VIM:grep搜索文本文件

时间:2017-03-23 05:25:15

标签: vim grep

我的FPGA项目有一个计算项目层次结构。我写了一个传递器来检查“Vivado / ISE”项目文件,并返回一个文件,其中包含项目用户的所有源文件列表(然后我在此列表上运行ctags)。

我希望能够从vim 7.4搜索这个文件列表,而无需通过FPGA库进行整个递归搜索。我可以使用类似的命令从linux命令行执行此操作:

cat ./files.txt | xargs grep -Hn my_function

其中./files.txt包含我要搜索的文件列表。但是我希望能够使用vim的内部grep函数。我也希望能够从Windows和Linux运行它。

是否有一种简单的方法可以将文件列表(包含在文件中)传递给vim的grep ex函数?

3 个答案:

答案 0 :(得分:2)

您应该使用CtrlSF之类的插件。但如果你坚持单独使用Vim,你可以这样做:

function! Grep(what, where)
    exec join(extend(['vimgrep', a:what],
        \ map(filter(readfile(a:where), 'v:val !=# "" && filereadable(v:val)'),
        \ 'fnameescape(v:val)')))
    copen
endfunction

command! -nargs=+ Grep call Grep(<f-args>)

然后,您只需拨打:Grep /pattern/ filelist,而不是:vimgrep /pattern/ ...

答案 1 :(得分:2)

第一步,使用列表中的所有文件填充参数列表:

" in UNIX-like environments
:args `cat files.txt`

" in Windows
:args `type files.txt`

第二步,在参数列表中搜索pattern

:vim pattern ##

答案 2 :(得分:1)

如果您已打开Vim中的所有文件,例如: vim `<files.txt` - 然后您可以使用(例如)

搜索所有这些内容
:bufdo g/my_function/

如果您:set nu,您将按行收到行号 grep -nHth