使用grep查找文件并在编辑器中打开

时间:2013-12-27 15:49:50

标签: bash vim emacs grep

我想使用grep搜索目录,并在选择的编辑器中打开带匹配的文件。 (emacs或vim会这样做。)

我可以通过vim $(\grep -l "static void main" *)打开第一场比赛,但这不会打开其他匹配的文件。 grep前面的\用于使用未经修改的grep,通常我有颜色的grep,因为它导致错误的文件名,所以不起作用。

我知道我可以尝试find,将结果分别导入grep,然后在xargs的帮助下,在新编辑器中打开相关文件。


最佳工作方案

USAGE
grepe static void main
grepv static void main

不需要""

安装的:
将其放入.bashrc

#emacs:
grepe(){
    emacs $(\grep -irl "$*" .)
}
#vim:
grepv(){
    vim $(\grep -irl "$*" .)
}

4 个答案:

答案 0 :(得分:6)

您可以在文件模式中使用**来递归搜索。例如,要在父目录及其所有子目录中的所有dostuff()文件中搜索包含.c的所有行,请使用:

:vimgrep /dostuff()/ ../**/*.c

了解更多@ http://vim.wikia.com/wiki/Find_in_files_within_Vim

对于独立于编辑器的方式,请尝试

vim -o $(grep -rl string directory)

答案 1 :(得分:4)

对于Emacs,您通常会在Emacs中执行find / grep。

e.g。使用 M-x rgrep

然后由E​​macs处理结果,您可以轻松跳转到任何结果。

答案 2 :(得分:2)

首先,您没有在模式后指定搜索路径。
最简单的方法:

vim $(grep -l "static void main" *)

对于更聪明的人(除非有任何结果,否则不打开Vim):

files=$(grep -l "static void main" *) && vim $files

答案 3 :(得分:0)

对于其他编辑器(例如sublimetext subl),我通常这样做:

grep ... -l | xargs subl

-l仅显示路径,因此如果它具有命令行支持,则可以直接使用编辑器打开