【问题标题】:emacs cross-file keyboard macroemacs 跨文件键盘宏
【发布时间】:2015-01-31 07:50:58
【问题描述】:

如何设置宏以跨多个文件工作?

例如,假设我有多个 Angular 应用程序,我想为每个模块添加一个可注入的?

所以对于每个这样的文件

./apps/app-name/index.js

我想找到第一个实例

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

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

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

【问题讨论】:

    标签: emacs macros


    【解决方案1】:

    其实很简单1

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

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

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

    最后使用 Cxo 返回目录,然后 Cn 移动到下一个文件,然后您将停止录制宏 ()。

    1“随便”创建一个键盘宏来处理在多个缓冲区中拆分的数据的便利性是真正让人们了解该功能的强大功能的原因之一。我第一次想到我可以实际上做到这一点是一个巨大的“啊哈!”对我来说是最重要的时刻,从那以后我一直是键盘宏的忠实粉丝。

    【讨论】:

    • 这是一个很好的答案。
    【解决方案2】:

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

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

    【讨论】:

    • 在将所有要处理的文件都标记为dired后,您还可以使用t k从缓冲区中隐藏所有其他文件,然后照常进行;或者您可以在宏录制中使用M-} 转到下一个标记的文件,而不是使用C-n
    • 哦,我明白了——你的意思是对每个文件,在该文件上运行一个宏直到它失败,然后然后移动到下一个文件并重复......
    猜你喜欢
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2010-11-13
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多