我有我的文件来源的文件。 我想要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