将键盘宏应用于Emacs中的活动区域

der*_*ekv 3 emacs macros

我试图学习更多地使用键盘宏,但不知道如何处理它.

我需要选择一个区域,然后在该区域上运行两个查询替换.每次该区域都不同,但查询替换将是相同的.

问题出现是因为第一个查询替换(或replace-string)删除了活动区域.如果我使用C-u C-SPC,则会显示保存开始标记,但不保存该点,因此活动区域不可用于第二次替换操作.

如何将两个操作(将活动区域作为副作用删除)应用于键盘宏中的同一区域?

mik*_*yra 8

由于我没有像所描述的那样执行任务,我常常不确定我能为您提供最快的解决方案,但至少有两种方法可行.

选项1

此选项涉及在执行查询替换之前使用缩小来将缓冲区减少到活动区域,或者无论您想对区域执行什么操作.工作流程如下:

  • ...开始录制区域处于活动状态的键盘宏
  • M-x 窄到区域
  • ...通过M-<(缓冲开始)等执行您想要快速跳回到开始的操作
  • M-x 扩大
  • ...停止录制键盘宏

您应该能够愉快地将它应用于任何突出显示的区域.

BTW:窄到区域和加宽有默认绑定 C-x n n(窄到区域)和C-x n w(加宽)所以你可以使用它们,以防你没有更改你的键绑定

选项2

此选项涉及使用寄存器在"销毁"区域之前存储区域的位置.实际的工作流程看起来像

  • ...开始录制区域处于活动状态的键盘宏
  • C-x r SPC 1(点对点)
  • C-x C-x (交换点和标记)
  • C-x r SPC 2(点对点)
  • ......执行"摧毁"该地区的行动
  • C-x r j 2(跳转到注册)
  • C-SPC
  • C-x r j 1(跳转到注册)
  • ...现在你的地区应该又回来了,所以很乐意应用任何其他不"破坏"该地区的行动
  • ...停止录制键盘宏