三島Haskell無名関数の会 第一回目にて
「三島Haskell無名関数の会 第一回目」ということで静岡の富士市で行った勉強会の中で、@kzfmさんが「静岡のHaskellerはemacsを使う」というお題でemacsのhaskell環境を披露してもらった。本題としてはemacsでhaskell環境を作るということで以下の環境を作成
- virthualenv(Haskellの仮想環境)
- hlint(コードチェック)
- ghc-mod(Haskellコードの保管)
- flymake(構文チェック)
この作業の中で感激した機能で
- emacs-24で利用可能な「M-x list-package」というパッケージインストール機能
- hlintでコードの書き方のチェック
- flymakeでコード編集時の構文チェック
emacs-24のインストール
Gentooでのインストールになるので、ご注意ください、「list-package」の機能がemacs-24からディフォルトで入っていると言うことなので、emacs-24をインストールする、自分はemacs-23だったのでemacsをアップデート
karky7 ~ # emerge -pv emacs ... ... [ebuild R ] app-editors/emacs-24.2:24 karky7 ~ # emerge -u emacs
Gentooは複数のemacsを利用できるのでeselect-emacsをインストールしておく
karky7 ~ # emerge -pv app-admin/eselect-emacs These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild R ] app-admin/eselect-emacs-1.14 .. .. karky7 ~ # emerge app-admin/eselect-emacs
emacsを切り替える、emacs-24だけインストールされているなら必要ありません
karky7 ~ # eselect emacs list Available Emacs symlink targets: [1] emacs-23 * [2] emacs-24 XEmacs is also installed karky7 ~ # eselect emacs set 2 Switching emacs to emacs-24 ... Switching ctags to ctags-emacs-24 ... Switching etags to etags-emacs-24 ... karky7 ~ # eselect emacs list Available Emacs symlink targets: [1] emacs-23 [2] emacs-24 * XEmacs is also installed karky7 ~ #
旧バージョンをインストールしている人は、emacsのパッケージをアップデートしておく
karky7 ~ # emacs-updater -a all * Searching for byte-compiled elisp files ... * Currently selected GNU Emacs version: 24.2.1 Found php-mode.elc (compiled by Emacs 24.2.1) Found xcscope.elc (compiled by Emacs 24.2.1) ... ...
「list-packageを」をインストールする
ロードパスの設定とpackageのarchiveの設定;;; ロードパスの追加 (setq load-path (append '("~/.emacs.d" "~/.emacs.d/packages/emacs-jedi" "~/.emacs.d/packages/json-mode" "~/.emacs.d/auto-install" "~/.emacs.d/custom" "~/.emacs.d/conf") load-path)) ;;; packages.el (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/")) (package-initialize)
これで、melpaとmarmaladeからパッケージを落とせるようになる
「list-packageを」を使ってみる
「M-x list-package」でパッケージリストを開く、開けたらお好みのパッケージを入れる事が出きるようになる。ghc-modのインストール
Gentooはghc-modパッケージがマスクされているのでマスクを解除してemergeするkarky7 ~ # emerge -pv app-emacs/ghc-mod These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild N ~] dev-haskell/io-choice-0.0.2::gentoo-haskell USE="doc hoogle -hscolour -profile {-test}" 3 kB [ebuild N ~] dev-haskell/ghc-syb-utils-0.2.1.1::gentoo-haskell USE="doc hoogle -hscolour -profile" 4 kB [ebuild N ~] dev-haskell/convertible-1.0.11.1::gentoo-haskell USE="doc hoogle -hscolour -profile {-test}" 15 kB [ebuild N ~] app-emacs/ghc-mod-1.11.2::gentoo-haskell USE="-emacs" 20 kB ... ... karky7 ~ # emerge app-emacs/ghc-mod
続いて、「list-package」を使ってghcをインストールする、インストール方法は「C-s」でghc辺りを検索してもらえればghcが見つかると思うので、「i」のキーを押してインストールしたいパッケージを選択する。その後「x」でインストールの実行をする
- ghc
- haskell-mode(ちなみにemergeでもあります)
- 「i」でパッケージを選択
- 「x」で指定したパッケージをインストール
flymakeのインストール
上の手順と同じで以下のパッケージをインストールしていく- flymake
- flymake-cursor
ghc-modの設定
編集を楽にするようにキーをバインドキーバインド
- 「C-j」・・・ 「->」を出力
- 「M-j」・・・ 「=>」を出力
- 「C-l」・・・ 「<-」を出力
(autoload 'ghc-init "ghc" nil t) (add-hook 'haskell-mode-hook '(lambda () (ghc-init) (local-set-key "\C-j" (lambda () (interactive)(insert " -> "))) (local-set-key "\M-j" (lambda () (interactive)(insert " => "))) (local-set-key "\C-l" (lambda ()(interactive)(insert " <- "))) ))
これがhaskellのコードを書いてると意外にだるいので、助かる
run-haskellの起動
コードをチェックする時にghciを起動するのですが毎回:lでコードをloadするのが面倒なので、ghciの起動とファイルの読み込みを「C-c C-l」で実行出来るようにしておく(defadvice inferior-haskell-load-file (after change-focus-after-load) "Change focus to GHCi window after C-c C-l command" (other-window 1)) (ad-activate 'inferior-haskell-load-file)
flymakeの設定
;; haskell ghc-mod ;; https://github.com/kazu-yamamoto/ghc-mod (autoload 'ghc-init "ghc" nil t) (add-hook 'haskell-mode-hook (lambda () (ghc-init) (flymake-mode)))
hlintのインストール
hlintはGentooのパッケージがあったのでそれを利用する(Maskでした)karky7 ~ # emerge -pv hlint These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild N ] dev-haskell/hscolour-1.19::gentoo-haskell USE="doc -profile" 25 kB [ebuild N ~] dev-haskell/haskell-src-exts-1.13.5:0/1.13.5::gentoo-haskell USE="doc hoogle -hscolour -profile" 285 kB [ebuild N ~] dev-haskell/uniplate-1.6.7::gentoo-haskell USE="doc hoogle -hscolour -profile" 30 kB [ebuild N ~] dev-haskell/hlint-1.8.35:0/1.8.35::gentoo-haskell USE="doc hoogle -emacs -hscolour -profile" 62 kB Total: 4 packages (4 new), Size of downloads: 401 kB ... ... karky7 ~ # emerge hlint
haskell-modeの設定
;;; haskell-mode (require 'haskell-mode) (add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
flymake使ってみる
適当にtest.hsなどを開いて編集してみるcuomo@karky7 ~ $ emacs test.hs
編集でシンタックスエラーを起こすと赤でエラー部分を表示してくれる
構文を直すと、今度は宣言が無いので警告を青で表示してくれる
hlintを使ってみる
「C-c C-c」でチェックをhlintに変えるすると「doがいらないよ」と赤く表示してくれる、要するに綺麗な書き方を指導してくれる。これで、入力補完、構文チェックがコード編集時に可能になる、これなら逝けるんじゃないか?
PHP、Pythonもこれで生きましょう (笑)
0 件のコメント:
コメントを投稿