假设我有很多文件:
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 :grep
shell,它不能真正地静音工作。你可能会在网上找到按下可怕的<CR>
的映射,但它们并不能真正解决任何问题。
:help :cexpr
命令族是一种噪音较小的替代方案,它允许您使用:help system()
,从而消除shell -out和<CR>
问题:
:cexpr system('grep -n needle ' .. expand('##'))
要输入的内容太多了,所以您可能需要将其转换为合适的命令或映射。
欢迎来到这个特别的兔子洞。