Vim: 在目录内全局和局部使用Ag搜索和替换

16

我正在使用vim中的:Ag来搜索模式,但是我不知道如何在我的项目中搜索和替换所有文件,或者在我指定的目录中进行搜索和替换。这该如何实现?


1
我创建了我的插件ctrlsf.vim来完成这项工作。 - dyng
Linux的sed命令不是就是为了这种操作而设计的吗(甚至不需要打开任何文件)?使用Ag或任何组合的Vim命令来模拟sed有什么意义呢? - user9224371
2个回答

21
在Vim中,项目范围内的搜索和替换最好是一个两步骤的过程,除非您安装了一个插件来为您抽象这两个步骤,例如EasyGrep.
在其最基本的形式中,项目范围内的搜索/替换如下所示:
:args `grep -nl foo *.js`
:argdo %s/foo/bar/c

尽管如此,它对于:Ag的帮助不大,因为Vim没有类似于:*do系列命令的内置命令可以在快速修复列表上工作。

Drew Neil有几个屏幕录像这里那里,处理项目范围的搜索/替换。第二篇文章底部提到的:Qfdo命令专门针对:vimgrep/:Ack/:Ag用户。使用该命令:Ag,两步操作变成:

:Ag foo
:Qfdo s/foo/bar/c

-- 编辑 --

Vim现在有:cdo:cfdo:ldo:lfdo


8
使用:cdo的示例::cdo s/foo/bar/g。该命令将在当前文件中查找所有包含"foo"的字符串,并将其替换为"bar"。 - Bala Clark

0
vim 中,有多种解决方案,但您必须打开所有文件才能执行此操作。您可以在不同的窗口、缓冲区或选项卡中打开文件,并且对于所有选项,您都有一种方法来操作所有文件:
:windo :Ag

或者

:bufdo :Ag

或者

:tabdo :Ag

请参阅:help windows:help buffers:help tab-page-commands以获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接