Emacs:如何重新标记以前标记的区域

Tru*_*ong 6 emacs

使用 Emacs 时,我通常需要对同一区域执行多个操作(通常非常大但不是定义明确的对象,例如“整个部分”、“整个段落”)。目前,我必须手动标记区域,执行第一个操作,然后返回重新标记区域,然后执行第二个操作,重复......非常繁琐。我想知道是否有任何快捷方式可以重新标记以前标记的区域?或者在我告诉 Emacs 取消标记之前保持区域标记的某种方法。

小智 8

如果该区域刚刚未标记(Emacs 称之为“停用”),C-xC-x则将对其进行标记(又名“重新激活”)。


Pet*_*r.O 5

下面的脚本片段将把键和弦F6, C-F6,绑定C-S-F6到管理器标记(与标记)当您更改标记周围和之间的文本时,标记会移动、缩小和放大。您可以使用您喜欢的任何键。将代码放入您的~/.emacs配置文件中。

  • 首先建立初始区域的边界(标记——点)。
  • 然后按F6将标记设置到该区域的边界。
  • 做任何你需要做的事...
  • C-F6根据需要 按 .Repeat *"Do.." 重新建立修改区域的边界
  • 当您完成后,使用C-S-F6来清除区域标记。

(global-set-key (kbd "<f6>") 'set-markers-for-region)
(defun set-markers-for-region ()
  (interactive)
  (make-local-variable 'm1)
  (make-local-variable 'm2)
  (setq m1 (copy-marker (mark)))
  (setq m2 (copy-marker (point))))

(global-set-key (kbd "<C-f6>") 'set-region-from-markers)
(defun set-region-from-markers ()
  (interactive)
  (set-mark m1)
  (goto-char m2))

(global-set-key (kbd "<C-S-f6>") 'unset-region-markers)
(defun unset-region-markers ()
  (interactive)
  (set-marker m1 nil)
  (set-marker m2 nil))
Run Code Online (Sandbox Code Playgroud)