emacs跨文件键盘宏

时间:2014-12-02 22:14:17

标签: emacs macros

如何设置宏来处理多个文件?

例如,假设我有多个角度应用,我想为每个模块添加一个注射器?

所以对于每个文件

./apps/app-name/index.js

我想找到

的第一个实例
angular.module('module-name', ['list', 'of', 'injectables']);

angular.module('other-module-name', [
  'list',
  'of',
  'injectables']);

并在列表末尾添加另一个项目。

2 个答案:

答案 0 :(得分:5)

实际上很容易 1

我将从单窗口框架开始,运行 Mx find-name-dired RET 以生成所有index.js个文件的dired列表(如果我理解正确的话)。或者您可以使用find-grep-dired列出包含angular.module(的所有文件。或rgrep如果个人匹配更合适。无论生成链接,您需要感兴趣的文件。

然后我将开始在第一个文件上记录宏(< f3> ),首先使用 o (来自dired; RET 来自grep)在另一个窗口中打开文件。

然后,您将以足够通用的方式执行编辑,以便操作适用于所有正在编辑的文件。

最后使用 Cx o 返回到dired列表,然后 Cn 移动到下一个文件,然后你将停止记录宏(< f4> )。

1 “随便”创建一个键盘宏以处理分散在多个缓冲区上的数据的难易程度之一就是真正驱动该功能强大功能的东西之一。我第一次想到实际上那样做是一个巨大的“啊哈!”对我来说,从那时起我一直是键盘宏的忠实粉丝。

答案 1 :(得分:1)

Philis的解决方案通常只是一个人所需要的,但是不幸的是,如果要执行的是对所有选定文件执行“耗尽”键盘宏,它就达到了极限。这是因为内部宏在到达缓冲区末尾时会响铃,这会中断外部宏的定义。

我在超级用户上提出了solution to this problem的建议:该命令允许对Dired缓冲区中选择的所有文件执行任意次数的宏。