@Malabarba提到了使用wgrep
软件包来编辑grep / ack / ag结果。
我想写一个详细的演练,介绍如何使用ag
软件包和wgrep-ag
软件包来使用软件包来编辑“ ag”结果multiple-cursors
。
这些软件包可通过Melpa获得。您还需要在系统上安装ag
aka 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-map
to 实例的过程。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 !
。