@Malabarba提到了使用wgrep软件包来编辑grep / ack / ag结果。
我想写一个详细的演练,介绍如何使用ag软件包和wgrep-ag软件包来使用软件包来编辑“ ag”结果multiple-cursors。
这些软件包可通过Melpa获得。您还需要在系统上安装agaka the_silver_searcher。
本演练适用于您正在寻找一种在所有/选定位置进行单行编辑的方法的情况ag。
安装ag系统和上述emacs的包上。
ag支持搜索内容与您指定的正则表达式匹配的文件。告诉ag项目根目录的最简单方法是在其中放置一个空.git文件夹。然后使用搜索M-x ag-project-regexp。
默认情况下,ag搜索的结果缓冲区不可编辑。要使其可编辑,请执行M-x wgrep-change-to-wgrep-mode或使用wgrep-default绑定C-c C-p。
现在,如果您需要在所有文件中将“ abcdef”更改为“ ghijkl”,则将搜索“ abcdef”,ag结果缓冲区将显示包含该字符串的所有行。然后,使该缓冲区可编辑,并手动更改那些字符串,这些更改将在执行M-x wgrep-finish-edit或使用默认绑定时反映在实际的文件缓冲区中C-c C-e。您也可以使用query-replace-regexp该搜索替换。
我更喜欢使用multiple-cursors快速重构,这样我就可以实时看到我的多个编辑同时发生的位置的反馈。突出显示要替换的字符串M-x mc/mark-all-like-this,然后在结果缓冲区中进行调用,然后敬畏地进行编辑,因为您会看到同时在多个点上对内容进行编辑。
如上所述,一旦您对编辑感到满意,就C-c C-e可以“反映”实际缓冲区中的更改。缓冲区尚未保存。
为了保存所有缓冲区,我通常使用emacs默认C-x s !绑定一次完成一次。
这是带有屏幕截图的示例用例:
它显示了替换my中所有bind-to-modi-mapto 实例的过程。bind-to-my-map~/.emacs.d/
当我bind-to-modi-map在emacs设置文件夹中搜索时,得到以下“ ag”结果:
该缓冲区是只读的。
在M-x wgrep-change-to-wgrep-mode,高亮显示,之后-modi-map,使用选择该选择的所有实例,M-x mc/mark-all-like-this并将这些选择编辑为-my-map,如下所示:

蓝色高亮显示当我按时将修改哪些行C-c C-e。
点击时C-c C-e,您可以在此屏幕快照中看到反映在实际文件中的更改:

然后,我将使用保存所有修改的文件C-x s !。