假设我有许多文件:
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
我如何才能做到这一点?
1条答案
按热度按时间8hhllhi21#
如果您不依赖于
:help 'grepprg'
的特定功能,那么:help :vimgrep
是您的最佳选择,因为工作是在内部完成的。如果你这样做了,那么你将不得不使用一个不同的命令,因为
:help :grep
shell ,它不能真正使其安静地工作。你可能会发现网上的Map,按可怕的<CR>
为您,但他们并没有真正解决任何问题。:help :cexpr
系列命令是一种噪音较小的替代方法,它允许您使用:help system()
,从而消除了shell out和<CR>
问题:但是,要输入的内容很多,因此您可能希望将其转换为适当的命令或Map。
欢迎使用this particular rabbit hole。