Автозаполнение 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 такой возможности нет?
Ответы
Ответ 1
Если нет поддержки по языку, вы можете использовать теги. Это общий механизм завершения.
-
Создайте файл TAGS
, который содержит список идентификаторов и где они определены. Emacs поставляется с программой etags
, чтобы сделать это на многих языках, но не Haskell; ghc поставляется с hasktags
.
-
Загрузите файл 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
) аналогичен, но непосредственно доходит до ближайшего совпадения перед точкой.
Ответ 2
ghc-mod предоставляет некоторое завершение для Haskell в Emacs, а также проверку с помощью hlint и ghc. В сочетании с M-/, это достаточно хорошо для меня.
Ответ 3
haskell-mode
в настоящее время не дает такой возможности. Существует некоторая работа по реализации анализатора haskell для CEDET - в этом случае пользователи автоматически получат функции автозаполнения. Но эта работа началась не так давно...
Ответ 4
Мой setup немного сложнее. Он использует инфраструктуру auto-complete, которая
показывает выпадающий список кандидатов, автоматически аналогичный традиционным IDE. Я загрузил этот script, который фиксирует все ключевые слова. В дополнение к этому я использую ghc-mod для создания имен модулей.
Ответ 5
Как "дешевый и жизнерадостный" механизм автозаполнения, не упустите M-/
. Он полностью эвристичен и не зависит от языка, но на удивление эффективен.
Ответ 6
Помимо автозаполнения для вашего собственного кода, вы также можете получить автозаполнение (с помощью apidocs even) для стандартной библиотеки, имена импорта и имена прагмы, используя company-ghc. Я нашел это руководство, чтобы быть очень полезным. Заметьте, я не получил, чтобы он работал полностью для себя, но я чувствую, что я близок: -)