5

В Sublime Text 2 я могу ввести prnfunc[tab] а затем он завершается до «PrintFunction». Если у меня есть проект, я могу нажать Cmd+P и ввести srcpy/hello.py а затем он перейдет к source/python/hello_world.py . Есть ли эквиваленты в Emacs?

п.с. Я думаю, что ido в emacs обеспечивает похожее нечеткое завершение, но только в мини-буфере.

2 ответа2

8

Для завершения попробуйте автозаполнение. Чтобы получить интеллектуальное завершение, вам может понадобиться "бэкэнд" для каждого языка программирования. Для Python попробуйте Emacs-jedi (заявление об отказе: мой проект). Автозаполнение поддерживает регистронезависимое завершение.

Для управления проектами рекомендую комбинацию Helm и eproject. С этими двумя вы можете найти source/python/hello_world.py помощью чего-то вроде s rc py hello RET . Шлем является основой для постепенного завершения и сужения выбора. Таким образом, вы можете получить не только управление проектом, но и другие функции. eproject - это плагин для управления проектами, который может выступать в качестве бэкэнда Helm.

Настройка всего сразу может быть трудной работой, поэтому я предлагаю просто настроить простой автозаполнение и сначала Helm. Эти двое значительно улучшат вашу среду Emacs.

1

Для автозаполнения я использую модифицированную версию 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 и т. д. или любой другой режим, который пользователь определяет для отображения в этом окне.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .