#macos #haskell #ide #text-editor #textmate
#macos #haskell #ide #текстовый редактор #textmate
Вопрос:
Я новичок в Mac и нахожусь в процессе настройки своего компьютера со всеми необходимыми программами, одной из которых является Haskell.
К моему удивлению, платформа Haskell для OS X не похожа на Windows (где есть графический редактор, построенный на установке платформы — winGHiC). После долгих поисков я нашел этот редактор TextMate, который должен быть совместим с Haskell, но я нахожу довольно сложным настроить для него пакет Haskell.
Я уже загрузил и установил следующее:
- Платформа Haskell для Mac OS X
- Xcode 3.4 (Обязательное условие Haskell)
- TextMate
- файлы haskell.tmbundle (упомянутые выше)
Кто-нибудь знаком с тем, как заставить это работать? Для меня это будет много значить подробное пошаговое объяснение, как я уже сказал, прошел всего 1 день с тех пор, как я впервые использовал OS X.
Огромное спасибо.
Комментарии:
1. WinGHCi сам по себе не является «редактором графического интерфейса». Вы можете использовать
ghci
программу из командной строки, что в значительной степени эквивалентно; это то, что я делаю. На самом деле я предпочитаю его WinGHCi, у которого выполнение команд отстой.
Ответ №1:
Что ж, это хорошая работа, что вы обнаружили, что tmbundle в эти дни находится на Github.
Вы должны быть в состоянии найти встроенные параметры, щелкнув Bundles
, затем Haskell
. В стандарте их довольно мало Haskell.tmbundle
. Наиболее очевидным полезным из них является … загрузите файл command-shift-r
или command-R
. Если вы написали модуль с окончанием .hs или .lhs, он … открывает его в ghci.
(Были некоторые разговоры об интегрированном терминале в TextMate II, но кто знает? Одной из раздражающих особенностей неинтегрированного терминала является то, что возникает соблазн «перезагрузиться», нажав command-R, а не выполнив :r внутри ghci
; в некоторых безумных ситуациях у меня будет открыто 15 копий терминала.)
Многие из приятных функций — это всего лишь общие функции TextMate, определяемые описанием языка, поэтому было бы неплохо прочитать общее описание тонкостей TextMate. Например, если выделены несколько строк, то command-/ закомментирует их с помощью --
s; или, если они уже закомментированы, раскомментирует их. Я взломал кое-что для этого задолго до того, как понял, что это уже есть, не изучив руководство достаточно внимательно.
Разумеется, у всего есть привязки клавиш, и очень легко добавить свои собственные для запуска небольших скриптов и вставки небольших фрагментов, гораздо удобнее, чем, скажем, в Emacs.
Bundles
Щелкните Bundle Editor
под ним и изучите текст на предмет разного рода вещей.
Так, например, чтобы вызвать табуляцию для запуска языкового расширения pragma, {-#LANGUAGE ... #-}
где курсор находится в пробеле, ...
сделайте копию Snippet
и замените
{-#LANGUAGE ${1}#-}
выбор Activation: Tab Trigger
и (скажем) LANG
в качестве триггера.
Одна приятная вещь заключается в том, что все они представляют собой сценарии оболочки, или же (как этот) частичные сценарии оболочки с некоторыми переменными TextMate, и вы можете в значительной степени написать их на своем собственном предпочтительном языке. (Для пакета Haskell у меня больше нет Haskell, о которых можно было бы говорить, но для других пакетов у меня есть.)
Подсветка синтаксиса на удивление хорошая, но она наталкивается на несколько необычных расширений, например «PackageImports», синтаксис GADT, разметку для системы документации Haddock и некоторые другие странности. Я взломал свой собственный, но формат синтаксических файлов кажется мне довольно непонятным, поэтому нет смысла отправлять вам копию. Haskell.tmbundle
За последние два или три года некоторые опытные разработчики Haskell внесли исправления. Человек, который первым сделал это, только изучал Haskell и, например, не составлял модули Haddocked, но, с другой стороны, он, к счастью, был очень опытным и имел глубокие знания о механизме TextMate.
Обратите внимание, кстати, что TextMate сохраняет исправления, которые вы делаете в Bundle Editor
, довольно странным образом. Пакеты, поставляемые с TextMate, например, C
, Ruby
HTML
, LaTeX
/Applications/Textmate.app/.../Bundles
и т.д., находятся в, ,. Те, которые вы устанавливаете, находятся в /Library/Application Support/TextMate/Bundles
. Когда вы вносите исправления через Bundle Editor
, они сохраняются в вашем локальном ~/Library/Application Support/TextMate/Bundles.
хранилище, это вроде как имеет смысл, но это немного сложно и препятствует публичному улучшению пакета Haskell. (Один пакет, которым я делюсь с людьми, а не с Haskell, я храню в самом последнем, самом внешнем каталоге в редакции git, поэтому оригинал и мои исправления находятся вместе.)
Привязка клавиш / опция «Поиск в Hoogle» действует на выделенных условиях; вот копия для веб-сайта hayoo, который может выполнять поиск по использованию подписи типа
echo "<meta http-equiv="refresh" content="0;
http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}">"
Если вы тайно устанавливаете hoogle, вы можете выполнить локальный вызов hoogle с помощью скрипта, подобного этому:
hoogle --w --n=100 '${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}'
выбираем Сохранить: Ничего, Ввод: выделенный текст или: Word, Вывод: Показать как HTML
Другие исправления, которые я внес, в основном тривиальны, например, фрагмент триггера табуляции для `{-#LANGUAGE … #-} или мои собственные эксцентричности.
Стоит упомянуть одну вещь, которую мне удалось интегрировать, — это typeof
исполняемый файл из Hackage, cabal install typeof
который запускается в ghci для получения сигнатуры предполагаемого типа. У меня есть привязка ключа для отображения предполагаемого типа в виде отображаемого фрагмента html, а также для его вставки. Это немного деликатно, но вот текст для отображения типов
#!/bin/bash
word=${TM_SELECTED_TEXT:-$TM_CURRENT_WORD}
module="${TM_FILEPATH}"
echo $word | typeof $module
выбираем Input: Selected Text
, Or: Line
; Output: Show as Tool Tip
, Activation : Key Equivalent
(затем выбираем привязку клавиш, моя control-option-command-j
) Аналогично, для вставки типа через typeof
создаем новый заголовок C (командный файл) и включаем это:
#!/bin/bash
word=${TM_SELECTED_TEXT:-$TM_CURRENT_WORD}
module="${TM_FILEPATH}"
echo $word | typeof $module | typeof_wordorder
# typeof_wordorder is the following hack compiled
# in my local ~/bin
# module Main where
# main = interact reword where
# reword :: String -> String
# reword xs =
# xs (head . words . concat . lines $ xs)
Здесь typeof
и typeof_worderorder
представлены исполняемые файлы Haskell, первый из которых установлен cabal, второй — описанный выше идиотизм, скомпилированный в моем локальном, ~bin
чтобы обойти некоторую скрытую бессмыслицу. Здесь вы должны выбрать Output : Insert as Snippet
Извините, я просто думаю о случайных вещах. Вам следует продолжать публиковать вопросы под этим заголовком, поскольку я думаю, было бы полезно посмотреть, как можно споткнуться, а также о каких взломах могли подумать наши более умные друзья-хаскеллеры. Я продолжаю подумывать о том, чтобы разместить «форк» моего tmbundle на github, но это не слишком увлекательно, и организация каталогов пакетов навсегда побеждает меня.
Комментарии:
1. вау, спасибо! вы не представляете, насколько я ценю весь уровень детализации, который вы затронули. Тройной «принятый ответ», если бы я мог