Автозавершение Haskell в Emacs с использованием Haskell-режима

Я установил 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 ответов


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

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

  2. загрузить с 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) аналогичен, но непосредственно завершается до ближайшего матча до точки.


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


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


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


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


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