Автозаполнение 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 такой возможности нет?


person 0xAX    schedule 06.08.2010    source источник


Ответы (6)


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

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

person Gilles 'SO- stop being evil'    schedule 06.08.2010

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

person danlei    schedule 07.08.2010

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

person Alex Ott    schedule 06.08.2010
comment
Вы знаете, как продвигается работа над CEDET для Haskell? - person J Cooper; 27.10.2011

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

person Wei Hu    schedule 08.08.2010

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

person Norman Ramsey    schedule 21.07.2012

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

person Emmanuel Touzery    schedule 16.11.2014