3

我正在尝试学习更多地使用键盘宏,但不知道如何解决这个问题。

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

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

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

4

2 回答 2

8

由于我不执行所描述的任务,因此我不确定我是否可以为您提供最快的解决方案,但这里至少有两种可行的方法。

选项1

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

  • ...开始录制您的键盘宏并激活区域
  • M-x窄到区域
  • ...执行您想要执行的操作,通过 M-<(beginning-of-buffer) 等愉快地跳回到起点
  • M-x扩大
  • ...停止录制您的键盘宏

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

顺便说一句:narrow-to-region 和 widen 具有 C-x n n(narrow-to-region) 和C-x n w(widen) 的默认绑定,因此您可以在未更改键绑定的情况下使用它们

选项 2

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

  • ...开始录制您的键盘宏并激活区域
  • C-x r SPC1(指向注册)
  • C-x C-x (交换点和标记)
  • C-x r SPC2(指向注册)
  • ...执行“破坏”该区域的操作
  • C-x r j2(跳转注册)
  • C-SPC
  • C-x r j1(跳转注册)
  • ...现在您的区域应该又回来了,所以请愉快地应用任何其他不会“破坏”该区域的操作
  • ...停止录制您的键盘宏
于 2013-03-01T20:55:00.147 回答
0

你缺少的是exchange-point-and-mark C-x C-x. 这具有重新激活标记的效果。

于 2013-03-02T01:24:32.547 回答