Для автозаполнения я использую модифицированную версию emacs ' dabbrev-expand
. Вот соответствующие разделы моего файла .emacs
(источник):
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Make TAB expand words. Source: ;;
;; http://emacsblog.org/2007/03/12/tab-completion-everywhere/ ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun my-tab-fix ()
(local-set-key [tab] 'indent-or-expand))
(add-hook 'c-mode-hook 'my-tab-fix)
(add-hook 'cperl-mode-hook 'my-tab-fix)
(add-hook 'php-mode-hook 'my-tab-fix)
(add-hook 'js-mode-hook 'my-tab-fix)
(add-hook 'python-mode 'my-tab-fix)
(add-hook 'sh-mode-hook 'my-tab-fix)
(add-hook 'emacs-lisp-mode-hook 'my-tab-fix)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Define the indent-or-expand function we ;;
;; just mapped to TAB ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun indent-or-expand (arg)
"Either indent according to mode, or expand the word preceding
point."
(interactive "*P")
(if (and
(or (bobp) (= ?w (char-syntax (char-before))))
(or (eobp) (not (= ?w (char-syntax (char-after))))))
(dabbrev-expand arg)
(indent-according-to-mode)))
Возможно, вас также заинтересуют Ясниппет и Хиппи.
Что касается поиска объявлений переменных / функций, я использую теги Emacs. Вот как я настроил это в моих ~/.emacs
(не написано мной, я нашел эти строки где-то или другое):
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ETAGS ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun create-tags (dir-name)
"Create tags file."
(interactive "DDirectory: ")
(eshell-command
(format "find %s -type f -name \"*.[ch]\" | etags -L -" dir-name)))
;;; Jonas.Jarnestrom<at>ki.ericsson.se A smarter
;;; find-tag that automagically reruns etags when it cant find a
;;; requested item and then makes a new try to locate it.
;;; Fri Mar 15 09:52:14 2002
(defadvice find-tag (around refresh-etags activate)
"Rerun etags and reload tags if tag not found and redo find-tag.
If buffer is modified, ask about save before running etags."
(let ((extension (file-name-extension (buffer-file-name))))
(condition-case err
ad-do-it
(error (and (buffer-modified-p)
(not (ding))
(y-or-n-p "Buffer is modified, save it? ")
(save-buffer))
(er-refresh-etags extension)
ad-do-it))))
(defun er-refresh-etags (&optional extension)
"Run etags on all peer files in current dir and reload them silently."
(interactive)
(shell-command (format "etags *.%s" (or extension "el")))
(let ((tags-revert-without-query t)) ; don't query, revert silently
(visit-tags-table default-directory nil)))
(global-set-key "\M-s" 'tags-search)
Наконец, я также настоятельно рекомендую отличный ECB для всех, кто пишет код на emacs
:
ЕЦБ расшифровывается как "Emacs Code Browser". В то время как Emacs уже имеет хорошую поддержку редактирования для многих режимов, его поддержка просмотра браузера несколько отсутствует. Вот где приходит ECB: он отображает ряд информационных окон, которые позволяют легко просматривать и просматривать исходный код.
Информационные окна могут содержать:
- Дерево каталогов,
- список исходных файлов в текущем каталоге (с полной поддержкой и отображением VC-состояния),
- список функций / классов / методов / ... в текущем файле (ECB использует CEDET-семантический, или Imenu, или etags, для получения этого списка, так что все языки, поддерживаемые любым из этих инструментов, автоматически поддерживаются и ECB )
- история недавно посещенных файлов (сгруппированных по нескольким критериям),
- прямое и автоматически обновляемое ecb-окно для семантического анализатора для некоторых значений Speedbar и
- вывод из компиляции (окно компиляции) и другие режимы, такие как помощь, grep и т. д. или любой другой режим, который пользователь определяет для отображения в этом окне.