Настройка TextMate для программирования на Haskell в Mac OS X - PullRequest
11 голосов
/ 16 апреля 2011

Я новичок в Mac, и сейчас я настраиваю свой компьютер со всеми необходимыми мне программами, одна из которых - Haskell.

К моему удивлению, платформа Haskell для OS X не похожа на Windows (где есть графический редактор, построенный на установке платформы - winGHiC). Посмотрев вокруг, я нашел этот редактор TextMate , который должен быть совместим с Haskell, но для меня довольно сложно настроить для него Haskell Bundle .

Я уже скачал и установил следующее:

  • Платформа Haskell для Mac OS X
  • Xcode 3.4 (предварительное условие для Haskell)
  • TextMate
    • файлы haskell.tmbundle (упоминалось выше)

Кто-нибудь знает, как заставить его работать? Это будет много значить для меня подробное пошаговое объяснение, как я уже сказал, я только 1 день, так как я впервые использовал OS X.

Спасибо большое.

1 Ответ

28 голосов
/ 16 апреля 2011

Что ж, это хорошая работа, которую вы обнаружили, что в эти дни на Гитхубе есть тумблуд.

Вы сможете найти встроенные опции, нажав Bundles, затем Haskell.В стандарте довольно мало Haskell.tmbundle.Наиболее очевидно полезным является ... загрузить файл command-shift-r или command-R.Если вы написали модуль с окончанием .hs или .lhs, он ... открывает его в ghci.

(Говорили об интегрированном терминале в TextMate II, но кто знает? Одна досадная особенность неинтегрированного терминала заключается в том, что возникает искушение «перезагрузить», нажимая command-R, а не делая: r внутри ghci; в некоторых безумиях будет развиваться, что у меня открыто 15 копий Терминала.)

Многие из приятных функций - это просто общие вещи TextMate, определяемые описанием языка, так что это может бытьхорошо, чтобы прочитать общее описание тонкостей TextMate.Например, если выделено несколько строк, команда- / комментирует их с помощью -- s;или, если они уже прокомментированы, раскомментируйте их.Я вместе взломал что-то для этого задолго до того, как понял, что он уже там, недостаточно внимательно изучив руководство.

Конечно, у всех есть привязки клавиш, и очень легко добавить свои собственные, чтобы запускать маленькие скрипты и вставлять маленькие фрагменты, гораздо больше, чем, скажем, в Emacs.

В разделе Bundles нажмите Bundle Editor и проверьте текст на предмет различных типов вещей.

Так, например, чтобы создать триггер табуляции, чтобы запустить прагму языкового расширения {-#LANGUAGE ... #-}, где курсор находится в пространстве ..., скопируйте Snippet и подставьте

{-#LANGUAGE ${1}#-}

выбрав Activation: Tab Trigger и (скажем) LANG в качестве триггера.

Одна приятная вещь заключается в том, что все они являются сценариями оболочки, или же (как этот), частичными сценариями оболочки с некоторыми переменными TextMate, и вы можете написать их на своем предпочтительном языке.(Что касается комплекта Haskell, то я не могу больше говорить о Haskell, но о других комплектах я делаю.)

Подсветка синтаксиса на удивление звучит удивительно, но спотыкается о нескольких необычных расширениях, например "PackageImports ", синтаксис GADT, разметка для системы документации Haddock и некоторые другие странности.Я взломал свой собственный, но я нахожу формат файлов синтаксиса довольно непонятным, поэтому бесполезно отправлять вам копию.Haskell.tmbundle был исправлен некоторыми знающими Хаскелерами за последние два или три года.Человек, который первым сделал это, просто изучал Haskell, и, например, он не составлял модули Haddock, но, с другой стороны, он, к счастью, был очень опытным и имел глубокие знания механизма 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 revision, так что оригинал и мои поправки находятся вместе.)

Связка клавиш "Lookup on Hoogle" /опцион действует на выделенных условиях;Вот реплика для веб-сайта hayoo, который может искать использование подписи типа

echo "<meta http-equiv=\"refresh\" content=\"0; 
http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}\">"

Если вы установили Google, вы можете сделать локальный вызов в Google с помощью скрипта, подобного так:

 hoogle --w --n=100 '${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}'

выбор Сохранить: ничего, ввод: выделенный текст, или: слово, вывод: показать как HTML

Другие внесенные мной поправки в основном тривиальны, как фрагмент триггера табуляции для `{-# ЯЗЫК ... # -} или мои собственные странности.

Стоит упомянуть, что мне удалось интегрировать это исполняемый файл 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, первый установленный кабалой, второй - вышеупомянутый идиотизм, скомпилированный в моем локальном ~\bin, чтобы обойти какую-то чепуху.Здесь вы должны выбрать Output : Insert as Snippet

Извините, я просто думаю о случайных вещах.Вы должны продолжать публиковать вопросы под этим заголовком, так как я думаю, что было бы целесообразно увидеть, как это может сбить с толку, а также то, что взламывает наши умные друзья из Haskeller, возможно, подумал.Я продолжаю иметь в виду поставить «развилку» моего tmbundle на github, но это не слишком увлекательно, и организация каталогов Bundle навсегда победит меня.

...