2010-08-06 2 views
20

Я установил haskel-mode в emacs. Тогда я пишу в моем .emacs:Автозаполнение Haskell в Emacs с использованием режима haskell

(load "~/.emacs.d/haskell-mode/haskell-site-file") 
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode) 
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation) 
(add-hook 'haskell-mode-hook 'haskell-font-lock-symbols t) 
(put 'downcase-region 'disabled nil) 

То, что я должен добавить в моем конф файле, Emacs может автозаполнение для Haskell? Или в режиме Haskell такой возможности нет?

ответ

18

Когда языковая поддержка отсутствует, вы можете использовать теги . Это общий механизм завершения.

  1. Сформировать TAGS файл, который содержит список идентификаторов и где они определены. Emacs поставляется с программой etags, чтобы сделать это на многих языках, но не Haskell; ghc поставляется с hasktags.

  2. Загрузите файл TAGS с помощью M-x visit-tags-table.

Теги не зависят от контекста, поэтому они будут без разбора предлагать типы, значения, конструкторы и т. Д. Везде. Они также не будут предоставлять расширенные функции, такие как простое отображение типа значения. Наиболее важные команды тегов:

  • M-TAB (complete-symbol) завершает идентификатор в соответствии с загруженным списком тегов.

  • M-. (find-tag) переходит к месту определения идентификатора в точке, при необходимости открывая содержащийся файл.

  • M-* (pop-tag-mark) возвращается туда, где вы были до M-..

  • M-x tags-apropos показывает список идентификаторов, соответствующих регулярному выражению.

Для получения дополнительной информации см. «Метки» в руководстве Emacs.


Для еще более грубого, но полностью автоматического механизма, есть динамического Abbrev особенности. C-M-/ (dabbrev-completion) выглядит в большинстве открытых буферов для завершения; это полностью не зависящее от языка, поэтому оно даже найдет слова в строках, комментариях, что угодно. M-/ (dabbrev-expand) аналогичен, но непосредственно доходит до ближайшего матча перед точкой.

8

haskell-mode в настоящее время не предоставляет такую ​​возможность. Существует некоторая работа по реализации анализатора haskell для CEDET - в этом случае пользователи автоматически получат функции автозаполнения. Но эта работа началась не так давно ...

+0

Вы знаете, как продвигается работа над CEDET для Haskell? –

10

ghc-mod обеспечивает некоторое завершение для Haskell внутри Emacs, а также проверку с помощью hlint и ghc. В сочетании с M- /, это достаточно хорошо для меня.

+0

Downvoter: Помогите объяснить? – danlei

7

Мой setup немного сложнее.Он использует инфраструктуру auto-complete, которая показывает выпадающий список кандидатов, автоматически аналогичный традиционным IDE. Я загрузил this script, который фиксирует все ключевые слова. В дополнение к этому я использую ghc-mod для генерации имен модулей.

5

Как «дешевый и жизнерадостный» механизм автозаполнения, не упускайте из виду M-/. Он полностью эвристичен и не зависит от языка, но на удивление эффективен.

2

Помимо автозаполнения для вашего собственного кода, вы также можете получить автозаполнение (с помощью apidocs даже) для стандартной библиотеки, имена импорта и имена прагмы, используя company-ghc. Я нашел this guide, чтобы быть очень полезным. Заметьте, я не получил, чтобы он работал полностью для себя, но я чувствую, что я близок :-)

Смежные вопросы