我的文件中有文件来源。当我在包含这些来源的文件时,我想搜索它们。
我跑不成功
!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