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

时间:2013-03-01 20:26:58

标签: emacs macros

我正在尝试学习更多地使用键盘宏,但不确定如何处理它。

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

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

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

2 个答案:

答案 0 :(得分:8)

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

选项1

此选项涉及在执行查询替换之前使用缩小将缓冲区减少到活动区域,或者您想要对区域执行的任何操作。工作流程如下:

  • ...开始录制区域有效的键盘宏
  • M-x narrow-to-region
  • ...通过 M-< (缓冲区开头)等执行您想要快速跳回到开始的操作
  • M-x widen
  • ...停止录制键盘宏

您应该可以愉快地将它应用于任何突出显示的区域。

BTW:窄到区域和加宽的默认绑定为 Cx nn (窄到区域)和 Cx nw (加宽)所以你可以使用如果你没有改变你的键绑定

,他们

选项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(跳转到注册)
  • ...现在你的地区应该又回来了,所以很乐意应用任何其他不“破坏”该地区的行动
  • ...停止录制键盘宏

答案 1 :(得分:0)

您遗失的是exchange-point-and-mark C-x C-x 。这有 重新激活商标的效果。