HaskellをNeovimで書きたい
ゴール
「NeovimでHaskellを書く」が今回のゴールです。具体的には以下のとおりです。
- 補完が出る。
- 定義に飛べる。
- 型の情報を確認できる。
環境構築
ghcup
公式サイトに従って、ghcupをインストールします。
インストールコマンドを実行すると以下の質問をされます。
Detected bash shell on your system...
Do you want ghcup to automatically add the required PATH variable to "$HOME/.zshrc"?
[P] Yes, prepend [A] Yes, append [N] No [?] Help (default is "P").
ghcupが.zshrc
にPATHを自動的に追加するかどうかを聞かれています。
Pを選び、自動で書いてもらいます。
Do you want to install haskell-language-server (HLS)?
HLS is a language-server that provides IDE-like functionality
and can integrate with different editors, such as Vim, Emacs, VS Code, Atom, ...
Also see https://haskell-language-server.readthedocs.io/en/stable/
Do you want to install haskell-language-server (HLS)?
HLS is a language-server that provides IDE-like functionality
and can integrate with different editors, such as Vim, Emacs, VS Code, Atom, ...
Also see https://haskell-language-server.readthedocs.io/en/stable/
[Y] Yes [N] No [?] Help (default is "N").
Haskell-language-server
を入れるかを聞かれます。
今回はneovim側で入れるのでNを選択します。
Do you want to enable better integration of stack with GHCup?
This means that stack won't install its own GHC versions, but uses GHCup's.
For more information see:
https://docs.haskellstack.org/en/stable/yaml_configuration/#ghc-installation-customisation-experimental
If you want to keep stacks vanilla behavior, answer 'No'.
[Y] Yes [N] No [?] Help (default is "Y").
stackがghcupのghcバージョンを使用するかを聞かれます。
今回はYを選択します。
最後に設定を反映させるために、上記に書かれているようにsoruce ~/.ghcup/env
を実行しましょう。
ghcup tui
を実行します。
以下のように、インストールできるstack, ghc, cabalが表示されます。
チェックマークが2つついているのが、使われるバージョンです。
基本的にrecommended
と書かれているバージョンが使われていればOKです。
Neovim
Masonでhaskell-language-server
をインストールします。
mrcjkb/haskell-tools.nvim
というプラグインをインストールします。
haskellを書く上で便利な機能を提供してくれるプラグインです。
nvim-cmp
などと連携したり、コードの評価などの機能があります。
-- 最小構成
{
'mrcjkb/haskell-tools.nvim',
dependencies = {
'nvim-lua/plenary.nvim',
},
version = '^2', -- Recommended
ft = { 'haskell', 'lhaskell', 'cabal', 'cabalproject' },
init = function()
vim.g.haskell_tools = {}
end,
}
ここまでセットしたら一度プロジェクトを作成します。
任意のディレクトリでstack new {プロジェクト名}
を実行し、Haskellプロジェクトを作成します。
プロジェクトディレクトリ内でstack build
を実行します。
プロジェクト内のHaskellファイルを開いて以下のように補完が効けば成功です。
hoogle
最後にhoogleを入れます。
hoogleはHaskellの型や関数を検索することができます。
hoogleの使い方は主に
- webブラウザから利用する。
- ローカル環境にインストールする。
があります。
今回は、ローカルにインストールして使います。
まず、stack install hoogle
を実行します。
インストールが成功したら、hoogle generate
を実行して、インデックスを作成します。
hoogle server --local
を実行します。
次にNeovim内で検索ができるようにします。
haskell-tools
にはhoogleと連携して検索を可能にする機能があります。以下のキーマップを追加します。
local ht = require('haskell-tools')
vim.keymap.set('n', '<space>hs', 'ht.hoogle.hoogle_singature')
ここまでできたら、また実行します。
このようにカーソル下の型シグネチャを検索できたら成功です。
ここまででNeovimでHaskellを書く環境が整いました。
今回インストールしたmrcjkb/haskell-tools.nvim
には他にも色々な機能がありますので、ドキュメントを読んでみることをおすすめします。
Discussion