有没有办法将本地和全局标记结合在一起?我想做的只是对pop-global-mark和set-mark-command有一个通用的键绑定。就像是; “尝试弹出本地标记,如果没有剩余的,则尝试弹出全局标记”。
这需要绕回代码,而不是考虑是否应该按C-u C-SPC
或C-x C-SPC
,这取决于函数之间的跳转是在同一个文件内部还是外部。
有没有办法将本地和全局标记结合在一起?我想做的只是对pop-global-mark和set-mark-command有一个通用的键绑定。就像是; “尝试弹出本地标记,如果没有剩余的,则尝试弹出全局标记”。
这需要绕回代码,而不是考虑是否应该按C-u C-SPC
或C-x C-SPC
,这取决于函数之间的跳转是在同一个文件内部还是外部。
首先,你不能真正set-mark-command
在代码中使用,因为它会检查this-command
,last-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)))
我认为您可能误解了C-u C-SPC
,C-x C-SPC
实际上“弹出”标记环,在缩短它们的意义上。我这样说是因为你写了“如果没有剩余的”。
他们不。他们循环标记环。因此,继续弹出本地标记环最终不会导致它为空,允许您设想的命令继续弹出全局标记环。
这两个环是分开的,主要是因为它们的使用方式不同。全局环将您从缓冲区带到缓冲区(仅)。本地环(仅)在单个缓冲区内移动您。
所以我的建议是不要寻找你正在寻找的东西;-)。或者,如果您真的想要它,那么在删除标记的意义上定义实际弹出环的命令。
FWIW,这两个命令有替代方案,包括让您查看与标记关联的文本并使用例如完成来选择目标的命令。
例如,在IciclesC-u C-SPC
中,将标记循环与设置标记结合起来,作为您的介绍句请求(但不是作为您的标题请求 - 有单独的Icicles命令用于循环本地和全局环)。同样,C-x C-SPC
对全局环执行此操作。在Icicle模式下,这些键默认绑定到多命令 icicle-goto-marker-or-set-mark-command
和icicle-goto-global-marker-or-pop-global-mark
.