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

vhmi4jdf  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(117)

假设我有许多文件:

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

我如何才能做到这一点?

8hhllhi2

8hhllhi21#

如果您不依赖于:help 'grepprg'的特定功能,那么:help :vimgrep是您的最佳选择,因为工作是在内部完成的。
如果你这样做了,那么你将不得不使用一个不同的命令,因为:help :grep shell ,它不能真正使其安静地工作。你可能会发现网上的Map,按可怕的<CR>为您,但他们并没有真正解决任何问题。
:help :cexpr系列命令是一种噪音较小的替代方法,它允许您使用:help system(),从而消除了shell out和<CR>问题:

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

但是,要输入的内容很多,因此您可能希望将其转换为适当的命令或Map。
欢迎使用this particular rabbit hole

相关问题