无法在 Vim 中 grep 源文件

无法在 Vim 中 grep 源文件

我的文件中有文件来源。当我在包含这些来源的文件时,我想搜索它们。

我跑不成功

!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 中的所有源文件中搜索单词“manual”。

如何仅在源文件中搜索单词 manual?

答案1

这对我有用:

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

sed 部分查找源文件并将它们作为参数传递给 grep。

为了避免每次都输入这个命令,您可以创建如下命令:

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

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

:SourceGrep "sudo ssh"

编辑:

要搜索包含“source”以及“.”的行:

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

该命令将如下所示:

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

答案2

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

:!grep 某些文本%

答案3

假设您已打开 .zshrc 文件,并且想要在其中的所有文件源中 grep 某些内容。您可以在 vim 中执行此操作,如下所示:

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

将“foobar”替换为您想要 grep 的任何内容。

答案4

假设您的主文件名为“mainfile”,您可以运行以下命令:

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

(我假设您source <file>在主文件内使用采购)

更新:看一个例子:

$ head a b c
==> 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

相关内容