💻

Julia+Neovim(AstroNvim)の環境構築

2024/02/18に公開

はじめに

JuliaをNeovimで開発する際の環境構築がまとまった記事がなくて苦戦したのでまとめておきます。
NeovimでAstroNvimというオールインワンの設定を使用していますが、Neovim、Coc、Masonあたりを使用していれば同様の方法でできるかと思います。
Julia、Neovim、Coc、Masonは導入済みとします。

Julia LSP Serverの設定

シェルで

julia

でJuliaのREPLに入ります。

using Pkg
Pkg.add("LanguageServer")

でLanguageServer.jlを追加しておきます。

Masonの設定

MasonはNeovimのLSPやリンター、フォーマッターといった開発支援環境を管理してくれるプラグインです。各種言語に応じて簡単に開発環境を整えることができるのでおすすめです。AstroNvimには初めからバンドルされています。
Masonでjulia-lspをインストールします。このとき、unzipコマンドがインストールされていないと少しハマったので、気をつけてください。
おそらくMason以外の方法でインストールしても問題ないかと思います。

coc-juliaの設定

:CocConfig

でCocの設定ファイルを生成/開きます(~/.config/nvim/coc-settings.jsonを作成してエディタで開いても構いません)。
設定ファイルを下のように記述してください。

coc-settings.json
{
  "languageserver": {
    "julia": {
      "command" : "julia",
      "args": [
        "--startup-file=no",
        "--history-file=no",
        "-e",
        "using LanguageServer, LanguageServer.SymbolServer; runserver()"
      ],
      "filetypes": ["julia"],
      "initializationOptions": {},
      "settings": {
        "julia": {
          "format": {
            "indent": 4,
            "ops": true
          }
        }
      }
    }
  }
}

起動

通常通り

nvim hoge.jl

のようにneovimを起動してください。
JuliaのLSPは起動に結構時間がかかるので、最初にLSPに接続できないというエラーが出ますが、そのうち起動して使えるようになります。私はNeovimのパッケージ管理にLazy.nvimを使用しているので、julia関連のパッケージが遅延読み込みされていることが原因かもしれません。また、そもそもJuliaはjulia hoge.jlで実行すると毎回JITコンパイラが走ってオーバーヘッドが大きいがちなので、LanguageServerをコンパイルPackageCompiler.jlとかでコンパイルすればマシになるかもしれません(アップデートとかが面倒になりますが)。

このように設定すると、以下のように関数の引数や返り値の型だったり、Docstrings等を多重ディスパッチも含めて見ることができたり、

定義元ジャンプや参照一覧、名前変更などの機能が使用できるようになります。また、フォーマッタによるコード整形もできます。
型が一致していないみたいな静的解析のエラーは表示されないと思います。できるかもしれません。

まとめ

Juliaは計算科学の分野では非常に優れた言語ですが、他の言語に比べるとエコシステムが貧弱な部分だったり情報が少ない部分はあります。
特にあまり環境構築についての記事を見つけることができなかったので、JuliaをVim/Neovimで使用したいという方はぜひ活用してみてください。

Discussion