问题 在vim中,如何将“args”设置为“grep -l”的结果?


为了说明,这里是如何从命令行执行此操作:

vim `grep "hello" * -Rl`

这将打开vim,其中包含所有“hello”的文件(-l仅提供文件名)。我想做同样的事情,但是从vim内部。从概念上讲,这样的事情(不起作用):

:args !grep "hello" * -Rl

我愿意采用完全不同的方法来实现这一目标;我只是希望它在一条线上(所以它很容易编辑和重做)。


答案是简单地使用反引号 - 但有一个关键的附带条件!  以下对我不起作用,因为 报价 周围 hello

:args `grep "hello" * -Rl`

但是如果我删除它们或逃避引号它会起作用:

:args `grep hello * -Rl`
:args `grep \"hello\" * -Rl`

(在混沌回答之后,这被埋没在评论中 - 我在这里添加它们以使它们更加明显,以防其他人遇到此问题)


6012
2018-06-23 16:00


起源



答案:


嗯,这对我有用:

:args `grep -Rl "hello" *`

运行vim 7.0.305。


8
2018-06-23 16:06



谢谢,我尝试使用反引号,但vim不识别它们 - 而是将“grep”解释为文件名。你有答案为你工作吗?如果是这样,我想知道为什么它对我不起作用。 - 13ren
是的,对我来说很好。也许是版本的东西。我正在使用7.0.305。 - chaos
嗯,:版本给我:VIM - Vi IMproved 7.0(2006年5月7日,编译2007年1月31日18:15:57)包含的补丁:1-122 - 13ren
好的,我升级到版本7.1.314,但同样的问题。我正在剪切你的代码,所以这不是一个错字。也许它是一个编译器选项或设置。但是有这么多,很难知道哪一个。 - 13ren
我找不到任何将反引号扩展与编译选项相关联的内容。有一些关于反引号扩展不能在限制模式下工作(启动时为-Z选项),但我不知道为什么你会在那之下运行。 - chaos


答案:


嗯,这对我有用:

:args `grep -Rl "hello" *`

运行vim 7.0.305。


8
2018-06-23 16:06



谢谢,我尝试使用反引号,但vim不识别它们 - 而是将“grep”解释为文件名。你有答案为你工作吗?如果是这样,我想知道为什么它对我不起作用。 - 13ren
是的,对我来说很好。也许是版本的东西。我正在使用7.0.305。 - chaos
嗯,:版本给我:VIM - Vi IMproved 7.0(2006年5月7日,编译2007年1月31日18:15:57)包含的补丁:1-122 - 13ren
好的,我升级到版本7.1.314,但同样的问题。我正在剪切你的代码,所以这不是一个错字。也许它是一个编译器选项或设置。但是有这么多,很难知道哪一个。 - 13ren
我找不到任何将反引号扩展与编译选项相关联的内容。有一些关于反引号扩展不能在限制模式下工作(启动时为-Z选项),但我不知道为什么你会在那之下运行。 - chaos


试试吧 args 命令:

:ar[gs] `grep -Rl "hello" .`

如果反引号不适合你,你使用的是使用当前版本的vim吗?

:version

3
2018-06-23 16:11



谢谢,我试过这个,但“grep”被解释为文件名... - 13ren
这是第7版,但不是最新版本。我现在正在检查新版本。 - 13ren
我刚刚升级到版本7.1.314,但同样的问题。我想知道问题是什么。 - 13ren
嗨,再次,似乎是你问好的引号 - 它没有它们工作正常,或者如果它们被转义。 :-) - 13ren
好的,我很高兴你找到了这个问题!干杯。 - Bill Karwin