4

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

测试.el:

;; =====
;; gnus:

some code here

;; ====
;; ECB:

some code here

;; =====
;; code:

some code here

(省略号)

测试.py:

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

some code here

# =====
# defs:

some code here

# =====
# args:

some code here

(在蟒蛇中)

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

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

其他一些解决方案可能一直在使用书签 - 但书签不是特定于文件的。它们是系统特定的。那是在书签列表中您拥有所有书签-而我只想获取给定文件的书签。

4

1 回答 1

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 一起提供,如果您需要更多信息,它会记录在那里。

于 2012-04-19T02:56:45.773 回答