跳过显示调用':grep '时要运行的外部命令



假设我有很多文件:

for i in $(seq 1 1000)
do
if [ $((1 + RANDOM % 100)) -lt 2 ]
then
echo "needle" > $(uuid)
else
echo "haystack" > $(uuid)
fi
done
然后我用vim

: 编辑

find . -type f | xargs -o vi --clean

我可以在这些文件中搜索:

:vimgrep needle ##

或:

:grep needle ##

但是,当我使用后者时,vim做了两件我希望它跳过的事情:

  • 显示了它将执行的外部命令,在本例中为:
:!grep -n needle ./499553b6-615d-11ed-9ef7-5f9f4b37d6da ./484c2354-615d-11ed-94ff-a3a9a2d52531 ./49492e82-615d-11ed-af5d-5363f17c2e2b ./4ab7cc42-615d-11ed-8d84-4fd2cdf1942
c ./4ad4a132-615d-11ed-8af6-2f5cbf24f5de ./4c1f26c0-615d-11ed-b630-6bcbd445b4a1 ./4de4b948-615d-11ed-8e82-4f0c16b0065e <snip>
  • 要求我在开始编辑匹配文件前Press ENTER or type command to continue

如何实现?

如果您不依赖于:help 'grepprg'的特定功能,那么:help :vimgrep是您的最佳选择,因为工作是在内部完成的。

如果你这样做,那么你将不得不使用一个不同的命令,因为:help :grepshell,它不能真正地静音工作。你可能会在网上找到按下可怕的<CR>的映射,但它们并不能真正解决任何问题。

:help :cexpr命令族是一种噪音较小的替代方案,它允许您使用:help system(),从而消除shell -out和<CR>问题:

:cexpr system('grep -n needle ' .. expand('##'))

要输入的内容太多了,所以您可能需要将其转换为合适的命令或映射。

欢迎来到这个特别的兔子洞。

最新更新