Автозаполнение Haskell в Emacs с использованием haskell-mode - PullRequest
20 голосов
/ 06 августа 2010

Я установил haskel-mode в Emacs.Затем я пишу в своем .emacs:

(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)

Что я должен добавить в свой файл conf, чтобы emacs мог автозаполнить для Haskell?Или в режиме Haskell такой возможности нет?

Ответы [ 6 ]

18 голосов
/ 07 августа 2010

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

  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.


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

10 голосов
/ 08 августа 2010

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

8 голосов
/ 06 августа 2010

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

7 голосов
/ 08 августа 2010

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

6 голосов
/ 21 июля 2012

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

2 голосов
/ 16 ноября 2014

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

...