1
看来etags使用全局标记堆栈。当我打开两个使用相同标签的缓冲区时,我在一个缓冲区(A)中执行find-tags
操作,然后在另一个缓冲区(B)中执行find-tags
操作。我切换回前一个缓冲区(A)并执行pop-tag-mark
操作。它会跳回到缓冲区B的前一个标记!多缓存可以有自己的etags标记堆栈吗?
有什么办法可以解决这个问题吗?
看来etags使用全局标记堆栈。当我打开两个使用相同标签的缓冲区时,我在一个缓冲区(A)中执行find-tags
操作,然后在另一个缓冲区(B)中执行find-tags
操作。我切换回前一个缓冲区(A)并执行pop-tag-mark
操作。它会跳回到缓冲区B的前一个标记!多缓存可以有自己的etags标记堆栈吗?
有什么办法可以解决这个问题吗?
首先,这完全是由设计。如果你在文件中跳转,imenu
更适合。
现在让我们尝试修改设计:
(defun my-pop-tag-mark (arg)
"call `pop-tag-mark' without argument.
Pop to the next mark in the current buffer wit C-u prefix."
(interactive "P")
(when (consp arg)
(let ((buf (current-buffer))
index)
(loop for marker in (ring-elements find-tag-marker-ring)
for i from 0 below (ring-length find-tag-marker-ring)
do (when (eq (setq temp (marker-buffer marker))
(current-buffer))
(setq index i)
(return)))
(if index
(ring-insert find-tag-marker-ring (ring-remove find-tag-marker-ring index))
(error "no marker found in current buffer."))))
(pop-tag-mark))