Emacs:有没有办法可以获得自定义标签列表 - 并通过它们导航?

时间:2012-04-07 11:33:51

标签: emacs tags bookmarks cedet emacs-ecb

假设我有一个带有以下标记的文件(或称之为标记):

test.el:

;; =====
;; gnus:

some code here

;; ====
;; ECB:

some code here

;; =====
;; code:

some code here

(在elisp中)

test.py:

# ========
# imports:

some code here

# =====
# defs:

some code here

# =====
# args:

some code here

(在python中)

所以我想要一个缓冲区,列出给定缓冲区/文件的标记(或称之为标记)。它还应该以某种方式通过这个标签进行导航 - 使用鼠标或键绑定(类似于table of contents的{​​{1}}功能)。

我想通过修改一些etags函数来解决这个问题。但是找不到一个(这将是一个解决方案,因为ECB在缓冲区中很好地显示了etags - 就像我想要的那样)。

其他一些解决方案可能一直在使用书签 - 但书签不是特定于文件的。它们是系统特定的。这是书签列表你有所有的书签 - 虽然我只想获得给定文件的书签。

1 个答案:

答案 0 :(得分:4)

使用Emacs Lisp示例代码,我解决了以下问题,可以添加到emacs-lisp-mode的钩子中,并且应该很容易调整其他语言。

(make-local-variable 'outline-regexp)
(setq outline-regexp ";; =+\n;; ")
(make-local-variable 'outline-heading-end-regexp)
(setq outline-heading-end-regexp ":\n")
(outline-minor-mode 1)

您现在可以使用标准大纲模式,其中包含如下键绑定:

C-c @ C-p  -> prevous header
C-c @ C-n  -> next header

C-c @ C-t  -> hide code between headers
C-c @ C-a  -> show all the code between headers

如果您暂时隐藏标题,您将获得缓冲区的大纲,移动到您想要的位置,然后再次显示代码。

对于python,只需替换;;在#。

的正则表达式中

outline-mode附带了Emacs,如果您需要更多信息,请在此处进行记录。