我正在寻找在Vim中对所有项目文件进行搜索和替换(确认)的最佳方法."项目文件"是指当前目录中的文件,其中一些不必打开.
一种方法是简单地打开当前目录中的所有文件:
:args ./**
Run Code Online (Sandbox Code Playgroud)
然后对所有打开的文件进行搜索和替换:
:argdo %s/Search/Replace/gce
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,Vim的内存使用量从几十MB增加到超过2 GB,这对我来说不起作用.
我也安装了EasyGrep插件,但它几乎不会工作 - 要么它找不到所有的事件,要么只是挂起直到我按下CtrlC.到目前为止,我完成此任务的首选方法是ack-grep搜索术语,使用它的quickfix窗口打开包含该术语的任何文件,之前未打开,最后打开:bufdo %s/Search/Replace/gce.
我正在寻找一个可以用于此的好的,有效的插件,或者一个命令/命令序列,它比我现在使用的那个更容易.
我在Vim中使用Ack插件,这有助于我快速搜索项目中的字符串.但是,有时我想替换找到的字符串的全部或部分出现.您可以使用像这样的Vim arglist进行某种全局搜索和替换(源代码):
:args app/views/*/*
:argdo %s/, :expire.*)/)/ge | update
Run Code Online (Sandbox Code Playgroud)
但args我不想使用,而是希望通过Ack进行搜索,然后在找到的所有文件中进行替换.有没有办法像argdo命令一样做?
到目前为止,我一直在使用find-and-replace操作手动重构代码
%s:/stringiwanttoreplace/newstring/g
Run Code Online (Sandbox Code Playgroud)
在vim.
但是,如果我在特定目录中的许多文件中都有stringiwanttoreplace,那么这是一个缓慢且费力的过程.
我目前/典型的缓慢而费力的过程涉及到一个问题: -
grep -rn "stringiwanttoreplace" .
Run Code Online (Sandbox Code Playgroud)
在我的终端中显示stringiwanttoreplace所在的所有位置/文件名; 现在我知道哪些文件包含stringiwanttoreplace,我将逐个打开每个文件,以在每个文件中执行查找和替换操作.
是否有更高效的工作流程(在vim中)来完成这项工作?
澄清:我更喜欢基于vim的解决方案,而不是bash脚本/单行.