Julia の Language server を Vim でうごかす
※ --- 2020/1/21 追記 ---
その2を書きました。
Julia の Language server を Vim でうごかす その2 - 書いたものなど
※ --- 2020/1/21 追記ここまで ---
やっと、 LanguageServer.jl を動かせるようになったのでまとめます。将来はもっと簡単になると思いますが、とりあえず。
Julia 側の準備
まずなんですが、現在 (2019/2/9) の時点では [LanguageServer.jl] は Julia v1.1.0 では正常に動作しないようです。なので、別に v1.0.3 をインストールします。この時、パスを通す必要はありません。
次に LanguageServer.jl と SymbolServer.jl をインストールします。Julia v1.0.3 を起動し ]add LanguageServer SymbolServer
と実行します。SymbolServer
は LanguageServer
の依存に入っているはずなんですけど、なぜか後で手動読み込みする必要があるので、明示的にインストールします。今のところ LanguageServer
は v"0.5.1" 、SymbolServer
は v"0.1.2" で動作確認しています。
※ --- 2019/4/4 追記 ---
SymbolServer.jl が v"0.1.3" に更新され、julia 1.1.0 でも動作するようになりました🎉
※ --- 2019/4/4 追記ここまで ---
LanguageServer の起動スクリプト startlanguageserver.jl
を保存しておきます。このファイルパスをのちに vimrc に書く必要があります。
- startlanguageserver.jl
import LanguageServer import Pkg import SymbolServer envpath = dirname(Pkg.Types.Context().env.project_file) const DEPOT_DIR_NAME = ".julia" depotpath = if Sys.iswindows() joinpath(ENV["USERPROFILE"], DEPOT_DIR_NAME) else joinpath(ENV["HOME"], DEPOT_DIR_NAME) end server = LanguageServer.LanguageServerInstance(stdin, stdout, false, envpath, depotpath, Dict()) server.runlinter = true run(server)
これで Julia 側の準備は終わりです。試しに include("path/to/startlanguageserver.jl")
を実行してエラーが出ないか確かめましょう。
Vim 側の準備
vim-lsp
と必要なプラグインをインストールします。
Plug 'prabirshrestha/async.vim' Plug 'prabirshrestha/vim-lsp'
vim-lsp
の README から引用しました。vim-plug を使った例のようですね。好きなプラグインマネージャを使うように読み替えましょう。自動補完が必要なら追加でいくつか必要です。
Plug 'prabirshrestha/asyncomplete.vim' Plug 'prabirshrestha/async.vim' Plug 'prabirshrestha/vim-lsp' Plug 'prabirshrestha/asyncomplete-lsp.vim'
最後に次の設定を vimrc に追加します。実行ファイルと起動スクリプトのパスを指定する必要があります。(s:julia_exe
及び s:julia_lsp_startscript
)
let s:julia_exe = 'path/to/julia-1.0.3-executable' let s:julia_lsp_startscript = 'path/to/startlanguageserver.jl' if executable('julia') autocmd User lsp_setup call lsp#register_server({ \ 'name': 'julia', \ 'cmd': {server_info->[s:julia_exe, '--startup-file=no', '--history-file=no', s:julia_lsp_startscript]}, \ 'whitelist': ['julia'], \ }) endif
以上で終わりです。
使用に関して
*.jl
なファイルを開くと起動します。起動に少し時間がかかるようなので気長に待ちましょう。わたしのノートPCだと20秒ぐらいかかります。補完はさらにインサートモードに入って何文字かタイプした後、7~8 秒待って次にインサートモードに入るときにはじまるようです。
全部の機能が動いているかはまだ試していません。SymbolServer
は結局動いているか微妙な感じもします。
※ 2018/2/10 追記 : リネーム機能は動いてない模様。あとでもうちょっと調べます。vscode だと動くんだけどな…