3

有没有办法将本地和全局标记结合在一起?我想做的只是对pop-global-markset-mark-command有一个通用的键绑定。就像是; “尝试弹出本地标记,如果没有剩余的,则尝试弹出全局标记”。

这需要绕回代码,而不是考虑是否应该按C-u C-SPCC-x C-SPC,这取决于函数之间的跳转是在同一个文件内部还是外部。

4

2 回答 2

2

首先,你不能真正set-mark-command在代码中使用,因为它会检查this-commandlast-command所以它不会按预期工作。

然而,检查它的代码,我想出了(未经测试!):

(defun pop-local-or-global-mark ()
  "Pop to local mark if it exists or to the global mark if it does not."
  (interactive)
  (if (mark t)
      (pop-to-mark-command)
      (pop-global-mark)))
于 2013-12-06T15:07:10.003 回答
2

我认为您可能误解了C-u C-SPCC-x C-SPC实际上“弹出”标记环,在缩短它们的意义上。我这样说是因为你写了“如果没有剩余的”。

他们不。他们循环标记环。因此,继续弹出本地标记环最终不会导致它为空,允许您设想的命令继续弹出全局标记环。

这两个环是分开的,主要是因为它们的使用方式不同。全局环将您从缓冲区带到缓冲区(仅)。本地环(仅)在单个缓冲区内移动您。

所以我的建议是不要寻找你正在寻找的东西;-)。或者,如果您真的想要它,那么在删除标记的意义​​上定义实际弹出环的命令。

FWIW,这两个命令有替代方案,包括让您查看与标记关联的文本并使用例如完成来选择目标的命令。

例如,在IciclesC-u C-SPC中,将标记循环与设置标记结合起来,作为您的介绍句请求(但不是作为您的标题请求 - 有单独的Icicles命令用于循环本地和全局环)。同样,C-x C-SPC对全局环执行此操作。在Icicle模式下,这些键默认绑定到多命令 icicle-goto-marker-or-set-mark-commandicicle-goto-global-marker-or-pop-global-mark.

于 2013-12-06T15:10:49.353 回答