2012-04-07 3 views
4

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

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 

(in python)

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

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

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

+0

Я не использую ECB, но является ли это «тегами», как в файле TAGS etags/ctags? Или что-то особенное для ЕЦБ? Если первое, я сильно сомневаюсь, что вы можете сделать его индексными комментариями. Однако есть улучшения над закладками, поэтому, возможно, есть способы улучшить рабочий процесс закладки. – phils

+0

Теперь я еще более смущен вашим определением «тегов», когда вы добавили в микс контур-второстепенный режим. Это * определенно * не очерченная терминология. Ваш вопрос остается неоднозначным. – phils

+0

@phils: Вы правы - мое редактирование не имеет ничего общего с тегами. Это еще один способ атаковать проблему навигации с помощью пользовательских меток (или назвать ее тегами). Возможно, я должен переформулировать вопрос. – Adobe

ответ

4

Используя код примера Emacs Lisp, я решил его следующим образом, которое можно было бы добавить в hook для 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 просто замените ;; в regexp с #.

outline-mode поставляется с Emacs и задокументирован там, если вам нужна дополнительная информация.

+0

Он работает! Это удивительно! Ты классный! – Adobe