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))