我想使用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 "$*" .)
}
答案 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
然后由Emacs处理结果,您可以轻松跳转到任何结果。
答案 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
仅显示路径,因此如果它具有命令行支持,则可以直接使用编辑器打开