Emacs: есть ли способ получить список пользовательских тегов - и перемещаться по ним?

Предположим, у меня есть файл со следующими отметками (или назовите его тегами):

test.el:

;; =====
;; gnus:

some code here

;; ====
;; ECB:

some code here

;; =====
;; code:

some code here

(в элиспе)

test.py:

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

some code here

# =====
# defs:

some code here

# =====
# args:

some code here

(в питоне)

Поэтому я хотел бы иметь буфер, который бы перечислял такие теги (или называл это метками) для данного буфера / файла. И это должно также облегчить навигацию по этим тегам в некотором роде - с помощью мыши или сочетаний клавиш (что-то похожее на table of contents функциональность rest-mode).

Я хотел решить эту проблему, изменив некоторые функции etags. Но не смог найти (это было бы решением, так как ECB показывает etags красиво в буфере - как я и хотел).

Некоторые другие решения могли бы использовать закладки - но закладки не зависят от файла. Они зависят от системы. То есть в списке закладок У вас есть все закладки - пока я хотел получить закладки только для данного файла.

1 ответ

Решение

Используя пример кода 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 и документируется там, если вам нужна дополнительная информация.

Другие вопросы по тегам