Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用grep查找文件并在编辑器中打开_Bash_Vim_Emacs_Grep - Fatal编程技术网

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

Bash 使用grep查找文件并在编辑器中打开,bash,vim,emacs,grep,Bash,Vim,Emacs,Grep,我想使用grep搜索目录,并在所选编辑器中打开匹配的文件。(emacs或vim就可以了。) 我可以通过vim$(\grep-l“static void main”*)打开第一个匹配,但这不会打开其他匹配文件。grep前面的\用于使用未修改的grep,通常我会将grep着色,这将无法工作,因为它会导致错误的文件名 我知道我可以在xargs的帮助下,尝试find,将每个结果传送到grep,然后在新编辑器中打开每个有问题的文件 最佳工作解决方案: 用法: grepe static void main

我想使用
grep
搜索目录,并在所选编辑器中打开匹配的文件。(emacs或vim就可以了。)

我可以通过
vim$(\grep-l“static void main”*)
打开第一个匹配,但这不会打开其他匹配文件。grep前面的
\
用于使用未修改的grep,通常我会将grep着色,这将无法工作,因为它会导致错误的文件名

我知道我可以在
xargs
的帮助下,尝试
find
,将每个结果传送到grep,然后在新编辑器中打开每个有问题的文件


最佳工作解决方案

用法:
grepe static void main

grepv static void main

不需要

安装:
将其放入您的
.bashrc

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

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

vim $(grep -l "static void main" *)
对于智能型(除非有任何结果,否则不会打开Vim):


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

:vimgrep /dostuff()/ ../**/*.c
阅读更多@

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

vim -o $(grep -rl string directory)

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

e、 g.使用M-x
rgrep

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

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

grep ... -l | xargs subl

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

我有点困惑。我认为您需要
find-typef | xargs grep-l'static void main'| xargs vim
,但听起来这不是您想要的…还只打开一个文件。但是发出错误
Vim:Warning:输入不是来自终端的
。如果有多个匹配项,它会打开多个文件…更明智的做法是列出结果,让您选择在编辑器中打开哪个文件。如何在bash中修复此问题并给出新的答案,@CodyChan?这并不能解决问题。将grep的输出通过管道传输到
|sed的/*/“&”/“
,以避免烦人的文件名。我个人认为在当前目录中递归运行它是它最通用的变体
files=$(grep-irl“staticvoidmain.”和&vim$files
如果可能的话,我正在寻找一个独立于编辑器的解决方案。不仅仅是为了维姆。还是谢谢你。:)很高兴它帮了我的忙,尤其是我在手机上写的:-)
grep ... -l | xargs subl