无法grep源文件在Vim中

我有我的文件来源的文件。 我想要search他们,当我在一个有这些来源的文件。

我运行不成功

!bufdo grep source 

 !bufdo grep source % 

.zshrc的例子,它来源于我想grep的path

 # ~/bin/shells/Zsh/describtion # ~/bin/shells/Zsh/bugs # ./bin/shells/zsh/alphaOptions . /Users/masi/bin/shells/.personal/ssh . /Users/masi/bin/shells/.personal/shellVariables . /Users/masi/bin/shells/.personal/alias . /Users/masi/bin/shells/externalPrograms . /Users/masi/bin/shells/codingSettings # . /Users/masi/bin/shells/OS/ubuntu/alias # ~/bin/shells/Zsh/sources 

假设你在我的.zshrc。 你想在Vim的所有源文件中search“manual”这个词。

你将如何只search源文件中的手册?

这对我工作:

 :! grep manual `sed -n 's/^\. \(.*\)/\1/p' %` 

sed部分查找源文件并将它们作为parameter passing给grep。

为了避免每次都input这个命令,你可以像这样创build一个命令:

 :command! -nargs=1 SourceGrep :! grep <args> `sed -n 's/^\. \(.*\)/\1/p' %` 

search多个单词时要小心,您必须使用引号。 例如:

 :SourceGrep "sudo ssh" 

编辑:

search“源”以及“。”的行:

 :! grep manual `sed -rn 's/^(\.|source) (.*)/\2/p' %` 

该命令将如下所示:

 :command! -nargs=1 SourceGrep :! grep <args> `sed -rn 's/^(source|\.) (.*)/\2/p' %` 

我不确定我是否正确理解了你的问题,但是如果你想从vim运行外部命令,并把它当前正在编辑的文件的内容传递给它,你可以使用如下所示:

:!grep sometext%

假设你打开了你的.zshrc文件,并且想要在其中的所有文件源中进行grep操作。 你可以像这样从vim做到这一点:

 !sed -ne 's/^\. \(.*\)/\1/gp' % | xargs grep foobar 

将“foobar”replace为你想要的任何内容。

假设你的主文件被称为“mainfile”,你可以运行如下的东西:

 $ grep searchstring mainfile $(grep source mainfile | awk '{print $2}') 

(我假设你在source <file>使用source <file>进行采购)

更新:看一个例子:

 $ head abc ==> a <== afile source b source c ==> b <== bfile ==> c <== cfile $ grep file a $(grep source a | awk '{print $2}') a:afile b:bfile c:cfile