2013年12月31日火曜日

vimとhaskell

自己紹介の処にも書いてある通り、普段はemacs派。
linux使い始めた頃がJE時代のMuleだったので、それしか知らなかったってのも大きな要素。

初心者の頃、root作業中に意思に反して立ち上がるviは恐怖以外のなにものでもなく、エスケープ連打と:qだけはマスターしてた。

ところが、なんかのきっかけでvimというのを触ってみたら、インサートモードでもバックスペースで文字が消せ、しかも、カーソルキーでカーソルが動く!!そんな普通のエディタっぽくなってたので、ドットインストールとかvimtutorとかして、最近では、とりあえず触るくらいはできるようになった。

で、emacsでは、各プログラム言語に対応した「なんとかモード」的なものがあるのだけれど、vimってどうなってるの?という初心者的疑問から、ちょっとだけ環境整備できたので、そのメモ。


設定ファイルvimrc

個人の設定ファイルの場所は7.4以降(archlinuxでのパッケージは7.4)

~/.vim/vimrc

vimは、「vim script」と云うもので、制御できるらしい。
以下のページのスライドにざっと目を通すと雰囲気が確認できた。
http://www.slideshare.net/cohama/vim-script-vimrc-nagoyavim-1

とりあえずは




プラグインのための準備


vimの機能拡張の管理をするための仕組みとして「neobundle」というのを使う。

https://github.com/Shougo/neobundle.vim

の「Quick start」の項目をみて、準備をする。

まず、~/.vim/bundle/ディレクトリを作成して、その中にgithubからneobundle.vimをコピー

次に、~/.vim/vimrcにneobundleのための必要事項を記入。(例をコピペでOK)

これで準備完了!!

プラグインのインストール


プラグインというものをインストールしてみる。
まずは、ステータスバーをカッコよく!!

https://github.com/itchyny/lightline.vim

スクリーンショット見ただけで、ワクワク。

「Installation」の項目をみると幾つかの方法が示されている。
うちは「neobundle」という方法を使うので、「neobandle」の方法を見てみると

NeoBundle 'itchyny/lightline.vim'


とかかれている。

この一行を、~/.vim/vimrcにコピペする。
コピペの場所は

NeoBundleFetch 'Shougo/neobundle.vim'


の下辺りに書けばよい。



haskellの環境


vimでhaskellする人たちのページによく紹介されているものに「ghcmod-vim」という、haskellコードの中の型の表示やコードのチェックをしてくれる便利なプラグインがある。

https://github.com/eagletmt/ghcmod-vim

で、このプラグインは、「ghc-mod」という外部プログラムを使うので、それを先にインストールしてねと説明される。そして、そのインストールは、「cabal」というのを使ってインストールできますよと説明される。「cabal」っていうのは、haskellプログラムのパッケージマネージャのようなもので、pacmanみたいなものらしい。

そこで、注意が必要なのだ!
archlinuxでは、pacmanというパッケージのシステムがあるが、それを介さずにシステムに何かをインストールする時は、その部分について自分で管理しなければならない。

以前railsとかを使うときに、rubyでも同じようなことがあった。何かのコミュニティが独自のパッケージシステムを持っているときに、ディストリビューションのパッケージシステムとどう折り合うかは面倒くさい問題だ。

というわけで、haskellについてのarchlinuxのwikiをみてみた。
https://wiki.archlinux.org/index.php/Haskell_Package_Guidelines

すると、パッケージング云々の前に、archlinuxでのhaskellの環境について知っておくべき重要なことが書いてあった。

archlinxとhaskell


まずは、リポジトリについて。
Archlinuxとhaskellの関わり方の方法は2つの選択肢があるらしいということを知った。

ひとつは、archlinuxのリポジトリにあるhaskellに関するパッケージを使うという選択肢。

もうひとつは、最新のhaskellパッケージを取り入れてある、ArchHaskellプロジェクトのリポジトリを使うという選択肢だ。

とりあえずは、archlinuxのリポジトリで満足。

次に、「Haskell-Platform」というものについて。
システム上でhaskellを使う場合、通常は「Haskell-Platform」と呼ばれるひとまとまりの環境をインストールするらしい。ところが、archlinuxのパッケージングでは、これらは以下の5パッケージに細分されている。

ghc
cabal-install
haddock
happy
alex
特に、xmonadをインストールする時に依存で勝手にghc等がインストールされた場合には、他のものがインストールされていなかったりするので、超要確認だ

というわけで、archlinuxでcabal installするなら、まずは

pacman -S ghc cabal-install haddock happy alex

しろってこと。

cabalでghc-modをインストール

さて、cabalによるhaskellパッケージのインストールはデフォルトでユーザー領域、~/.cabal以下にインストールされる。なので、当初の心配事であったシステムとの整合性はあまり問題ないとおもう。

まず、cabalを使う下準備は、シェルから「cabal update」すると、はじめてのときは、~/.cabalディレクトリを作って、必要なことをやってくれる。あと、cabal自体の最新版があるからアップデートしてね的なメッセージは無視。cabal-installパッケージ自体はpacmanの方に任せることにする。

その作業が終わったら、パッケージをインストールしてみる。ターゲットはghc-modだ。

cabal install ghc-mod

依存関係にある他のパッケージとかも一緒にインストールしてくれる。
haskellのコンパイルはs101にとっては重労働らしく、結構な時間がかかるが、辛抱強く待てばそのうち終わる。

実は、、


実は、うちでは結構ハマったので、他にも陥っている人がいた時用のメモ。

haskell-platformというものを知らなかったので、適当にcabal-installパッケージをpacmanでインストール。そして、「cabal install ghc-mod」すると、インストール途中で何かのファイル(モジュール)が足りないということで、エラー。
これが、事の発端だと思う。

そこから、あまりエラーメッセージを読まずに、上で書いたarchlinuxのwikiを見て、リポジトリ変えたり、足りないパッケージ入れたりして、試してた。その中で、cabalインストールを初期化した方が良いだろうと思って、.cabalディレクトリを消したりしてた。

で、どうもうまくいかない。そして、エラーメッセージをよく見ると、ありそうなはずのモジュールがないといっている。。。

で、いろいろやってて見つけたのが~/.ghcの中のパッケージデータベース。
~/.cabalを直接消したりしてたから、これとの整合性がとれなくなってたらしい。

なので、はじめてcabalする時にごちゃごちゃやって、上手くいかなくなってるなら、~/.cabalと~/.ghcを両方削除して、一からやり直してみると良いかも?


お勧め?


とりあえず、この辺を順番に試してみようかなぁ

VimでHaskellを書く時に入れておきたいプラグイン5つ

すごい Vim で Haskell を書こう ... の補足

四苦八苦して入れたghc-modを使うghcmod-vimは、s101だと、結構重かったりした。
まだ、全部は試してないけれど、記念撮影♪




0 件のコメント:

コメントを投稿