Haskellのコードを書くときは、Windows 10からTeratermでDebianサーバにSSH接続し、そこでEmacsを-nw
で起動して使っています。
標準のhaskell-mode
でとくに不満はないのですが、いちおうghc-mod
も入れていて、単純なエラーの確認にはとても重宝しています。
でも、ghc-mod
の補完機能はほとんど使っていませんでした。補完のためのコマンドが手になじまず、調べている間に手打ちしてしてしまうので、ちっとも身に付かなかったからです。
とはいっても、ある程度の量を書いていると、やはり手で打っているのではしんどくなってきます。何とかならないかなーと思っていたところ、company-ghc
というものを発見しました。
Company GHC
https://github.com/iquiw/company-ghc
ターミナルで開いているEmacsでも、統合開発環境のような補完メニューを実現するcompany-mode
というツールがあって、そのHaskell版をghc-mod
を介して実現するためのパッケージらしい。試しにインストールしてみたところ、こんなふうに、まるで統合開発環境のようになりました。これならぼくにも使えそう。
インストールと設定の概略
すでにghc-mod
を入れているなら、そのインストール時にEmacsのパッケージをMELPAから取得できる状態にしていると思います。その場合は、M-x package-install
でcompany-ghc
を指定するだけで、必要なパッケージを含めてインストールしてくれます(したがって事前にcompany-mode
を個別にインストールする必要もありません)。MELPAからパッケージを取得する設定にしていない場合は、init.el
かどこかに以下を設定します。
(require 'package) (add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/") t) (package-initialize)
無事にインストールできたら、まずはcompany-mode
を有効にします。haskell-mode
利用時のみ有効にすることも可能ですが、せっかくなのでグローバルに有効にしておきます。そのほうがCtrl-c Ctrl-l
でGHCiを起動したときにも補完が効くようになるし、いろいろ便利なはず。
(require 'company) (global-company-mode)あとは下記のように
company-ghc
を設定すれば完了です。
(add-to-list 'company-backends 'company-ghc) (custom-set-variables '(company-ghc-show-info t))
これだけでもとりあえず動くはずですが、company-mode
のパラメータを少しいじったほうが使いやすそう。
(setq company-idle-delay 0.5) ; 補完候補を表示するまでの待ち時間 (setq company-minimum-prefix-length 2) ; 補完候補の表示を開始する入力文字数 (setq company-selection-wrap-around t) ; 補完候補のスクロールが末尾に到達したら先頭に戻る
さらに、補完候補がポップアップ表示される際の背景色などを好みで設定します。下記の設定に加えて、Teratermの[ウィンドウの設定]で「256色モード(xterm形式)」にチェックが入っていて、かつサーバ側の環境変数TERM
がxterm-256color
に設定されていないと、とても日常の使用には耐えない悲惨なユーザインタフェースになってしまいます。
(set-face-attribute 'company-tooltip nil ; ポップアップ全体 :foreground "black" :background "ivory1") (set-face-attribute 'company-tooltip-common nil ; 入力中の文字列と一致する部分 :foreground "black" :background "ivory1") (set-face-attribute 'company-tooltip-selection nil ; 選択項目の全体 :foreground "ivory1" :background "DodgerBlue4") (set-face-attribute 'company-tooltip-common-selection nil ; 選択項目のうち入力中の文字列と一致する部分 :foreground "ivory1" :background "DodgerBlue4") (set-face-attribute 'company-preview-common nil ; 候補が1つしかなくて自動で入力される場合 :background "black" :foreground "yellow" :underline t) (set-face-attribute 'company-scrollbar-fg nil ; ポップアップのスクロールバー :background "Midnight Blue") (set-face-attribute 'company-scrollbar-bg nil ; ポップアップのスクロールバー :background "ivory1")
これで、最初の例のように、いい感じに補完候補が表示されるようになりました。
ちなみに、上記の色の設定例で「候補が1つしかなくて自動で入力される場合」とあるのは、下記のように候補が決定的になった状況のことです。
項目を選択した状態で[F1]を押すと、その項目のヘルプも見られます。
関係ないけど、TeXも捗る。
0 件のコメント:
コメントを投稿