0

为非常不清楚的标题道歉。

基本上在 emacs 中,您可以执行 C-SPC C-SPC 设置标记,然后使用 Cu C-SPC 回到该标记点。怎么可能有一个可以设置标记并转到该位置的功能(如果之前使用该功能设置了标记)。

意思是,我想绑定 CM-f2 来设置一个标记(如果没有设置),所以模拟 C-SPC C-SPC,如果之前设置了一个标记,CM-f2 将去那个模拟 Cu C-SPC 的位置。

在 C 中,这将类似于:

bool mark = 0;
while (1) {
 if (mark) {
  command = C-u C-SPC;
  mark = 0;
 } else {
  command = C-SPC C-SPC;
  mark = 1;
 }
}
4

1 回答 1

2

我不认为使用标记是正确的解决方案,但这里有一些使用寄存器的东西。

(defun register-set-or-jump ()
  (interactive)
  (let ((pos (get-register :saved-pos)))
    (if (markerp pos)
        (progn
          ;; Saved position found.
          ;; Jump there and clear the register.
          (jump-to-register :saved-pos)
          (set-register :saved-pos nil)
          (message "Jumped to saved position"))
      ;; No saved position available.
      ;; Save point to the register.
      (point-to-register :saved-pos)
      (message "Saved position to register"))))

(global-set-key (kbd "<C-M-f2>") 'register-set-or-jump)

我建议使用寄存器而不是标记的原因是许多 Emacs 命令依赖和/或修改标记,而您可以根据需要或多或少地使用寄存器。

于 2013-11-14T20:54:17.347 回答