8

Homebrewを使用してMacにHaskellをインストールしましたbrew install ghc haskell-platform

Vimでコーディングしながらソースを閲覧できるように、標準のHaskellプラットフォームライブラリ(モジュール)のctagsファイルを生成する方法を探しています。特に必要なのは、その他の最も人気のあるモジュールなどです。PreludeData.List

ソースはHoogleを介してWebで入手できることは承知していますが、学習目的で、必要なときにいつでもソースにジャンプする方が簡単です。

  1. Haskellプラットフォームをインストールするときのソースはどこにありますか?
  2. Haskellプラットフォームをインストールするときにソースもインストールされますか、それともコンパイルされたバイナリなどだけですか?
  3. ソースをVimで閲覧できるようにするにはどうすればよいですか?生成されたtagsファイルをどこかに置き、Vimにそれから読み取るように指示します。tagsまた、これらのモジュールはほとんど静的であり、頻繁に更新されないため、ファイルを再生成する必要がないことも理解しています。
4

1 に答える 1

10

1)と2)はコメントでpermeakraによって答えられました。私が使用しているものと同様のセットアップを説明することにより、3)をカバーしようとします。基本ライブラリの最初の単純なソリューション、次に一般的なHaskellソースパッケージのより一般的なソリューション。

前提条件として、Haskellのタグファイルを生成するツールが必要になります。

cabal install hothasktags

あなたの代わりにhothasktagsあなたの好きなものを使うかもしれません。たとえば、これらのいくつかを列挙しているhttps://github.com/bitc/lushtagsページを参照してください。

次に、ベースライブラリのソースを利用できるようにする必要があります。ここでは、GitHubのものを使用しています。

cd /space/haskell/sources/ # tweak to your personal taste
git clone https://github.com/ghc/packages-base.git

オプションで、特定のブランチに切り替えることもできます。例えば:

git checkout ghc-7.4

実行git branch -aしてすべての可能性を確認します。

次に、ベースライブラリのタグを生成しましょう(私はMacを利用できないため、コマンドがそこで機能すると想定する必要があります。そうしないと、適切に調整できます)。

cd packages-base
export LC_ALL=C # needed for case-sensitive searching
find -type f | egrep \.hs$\|\.lhs$ | xargs -Ii hothasktags i | sort > tags

ソートに関する注意:ソートを使用しないとVimが文句を言います。LC_ALL説明については、たとえばこのブログ投稿を参照してください)

次に、生成したタグについてVimに通知する必要があります。$HOME/.vimrc最も簡単な方法は、おそらく次の行をあなたの:に入れることです。

autocmd FileType haskell setlocal tags+=/space/haskell/sources/packages-base/tags

このようにして、ベースライブラリのタグが開くHaskellファイルごとに設定されます。これが望ましくない場合は、次のVimコマンドを次のように配置できます.vimrc

autocmd FileType haskell command! SetGHCTags
    \ setlocal tags+=/space/haskell/sources/packages-base/tags

:SetGHCTagsオンデマンドで呼び出します。

すべてのHaskellソースパッケージで機能するより一般的なソリューションについては、次の関数を使用できます(.vimrcHaskellファイルタイプ専用のVimファイルに挿入または挿入)。

" Add 'tags' of the given package to the current tag stack. The package sources
" must be available in "/space/haskell/sources/<package>" and the tags must be
" generated for it.
fun! s:SetHaskellTags(pathInHaskellSrcDir) "{{{
  let tagFile = "/space/haskell/sources/" . a:pathInHaskellSrcDir . "/tags"
  if filereadable(tagFile)
    exe "setlocal tags+=" . tagFile
  else
    echoerr "File does not exist or is not readable: " . tagFile
  endif
endfunction "}}}
command! -nargs=1 SetHaskellTags call <SID>SetHaskellTags(<args>)

たとえばShelly.hs図書館でそれを利用する:

cd /space/haskell/sources/
git clone https://github.com/yesodweb/Shelly.hs.git
cd Shelly.hs
regenerate-haskell-tags # [1]

Vimでは次のように呼び出します。

:SetHaskellTags "Shelly.hs"

改善の余地があります-SetHaskellTags存在しない場合はタグを生成することも、ソース、構成可能なHaskellソースコードストレージ、ディレクトリ補完などをフェッチすることもできます。しかし、今は十分に機能します。したがって、少なくとも私が持っているソリューションを共有します。これらの改善のいくつかが行われたら、ここに戻ってきます。

[1]:に保存することをお勧めregenerate-haskell-tagsします$PAHT

于 2012-09-08T10:37:17.283 に答える