どうも、プログラミングを始めて一年ちょいくらいの初心者エンジニアです
普段はscalaを主に書いていて、ちょこちょこAngularとかも書いてます
両方vimを使って書いてますが、定義元ジャンプとか補完機能とかはやっぱりIDEとかVScodeの熱いプラグインが優秀すぎて。。。
じゃぁそっち使えよって話なんですが、基本的なターミナルでの操作がしっかりできるようになるまではIDEじゃなくてemacsとかvim使おうって会社のCTOに言われたので今はvimで開発しています
でもやっぱり強い補完機能、定義元ジャンプ、構文エラーくらいは教えて欲しい。。。
そしたら最近vim-metalsとかいうプラグインが激アツとの情報が流れてきたので入れてみたんですが神すぎたので共有します
環境 | |
---|---|
OS | MacOS |
vimのプラグイン管理 | Plug |
terminal | hyper |
言語 | Scala |
※ただちゃんと理解はできていないのでおかしいところあったら教えてくださいImage may be NSFW.
Clik here to view.
それでは早速インストールしていきましょうー!!
Vim・Metals
JDKのバージョン確認
$ java -versionopenjdk version {1.8系}
JDKのバージョンが8系であることを確認してください
9から上はサポートされてないらしいのでもしバージョンが違う場合はJDK8に変えてください
Vimのバージョン確認
$ vim --version | headVIM - Vi IMproved 8.1 (2018 May 18, compiled Feb 19 2019 12:07:03)
vimのバージョンは8.1以上じゃないとダメらしいので確認してください
coc.nvimのダウンロード
Langage Serverっていう各言語ごとの、補完、定義元ジャンプ、ソースコードのエラー解析みたいな機能を提供してくれるものがあるらしく(IDEも要するにこれを使ってあの最強の環境を実現してると)
それらをまとめて管理できるものを入れないといけない(そゆわけでもないのかな)
いくつかあるんだけど一番人気なのはこれらしい
https://github.com/Microsoft/language-server-protocol/blob/master/protocol.mdLSP(Langage Server Protocol)っていう各言語ごとの補完とかを提供する際の規約をMicroSoftがちょっと前に定めたらしい。
ちょっとよくわからない。
まぁいいやとりあえずインストール
#coc.nvimを使うにはnode.jsが必要なので入れるのと
#yarnで拡張機能を管理できるので入れる
$curl -sL install-node.now.sh/lts | sh
$curl --compressed-o--L https://yarnpkg.com/install.sh | bash
できたらPlugっていうvimプラグイン管理ツールを使ってcoc.nvim
をInstall
ない人は入れてください
vim-plug導入
" ~/.vimrc" Configuration for vim-plug
Plug 'derekwyatt/vim-scala'
Plug 'neoclide/coc.nvim',{'do':{-> coc#util#install()}}" Configuration for vim-scalaauBufRead,BufNewFile *.sbt setfiletype=scala
そんで:PlugInstall
してください
できたら~/.vim/coc-settings.json
に以下を追記してください
{"languageserver":{"metals":{"command":"metals-vim","rootPatterns":["build.sbt"],"filetypes":["scala","sbt"]}}}
次にCoursierっていうコマンドラインインターフェースを使って最新のMetalsをビルドします
# Make sure to use coursier v1.1.0-M9 or newer.
$curl -L-o coursier https://git.io/coursier
$chmod +x coursier
$./coursier bootstrap \--java-opt-Xss4m\--java-opt-Xms100m\--java-opt-Dmetals.client=coc.nvim \
org.scalameta:metals_2.12:0.5.2 \-r bintray:scalacenter/releases \-r sonatype:snapshots \-o /usr/local/bin/metals-vim -f
できたらいけてるはず
Scalaのプロジェクトを開いてみる
初めてbuild.sbtを開くとビルドをインポートしますかって聞かれるので1と入力する
Image may be NSFW.
Clik here to view.
頑張ってる
Image may be NSFW.
Clik here to view.
でけた
Image may be NSFW.
Clik here to view.
vimが最&高に近づいてることを確認
Image may be NSFW.
Clik here to view.
怒ってくれた
Importとか
Image may be NSFW.
Clik here to view.
こんな手厚い補完が...
選択すると
Image may be NSFW.
Clik here to view.
全部書いてくれる。マジすばらしい
それだけじゃない!!
Image may be NSFW.
Clik here to view.
なんとわざわざimport書かなくても、、、、、
Image may be NSFW.
Clik here to view.
オートインポートしてくれる
しかもしかも!
メソッドの補完までしっかりと。
Image may be NSFW.
Clik here to view.
importのソートもしてくれる
:SortScalaImports
ってコマンド打つとimportを言語の規定に沿ってsortしてくれる(いまいちわからんけど)
Image may be NSFW.
Clik here to view.
.vimrc
ファイルに以下を追記して
" Remap keys for gotos
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent>gr<Plug>(coc-references)
Futureのsuccessfulメソッドの上でgd
とかやると
Image may be NSFW.
Clik here to view.
GOD
Image may be NSFW.
Clik here to view.
最&高に近づいたね
今回の記事に関係するリンクは以下です
Vim・Metals
vim-plug導入
https://github.com/blueshirts/darcula
https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md
あなたの sbt update を爆速にする sbt-coursier の紹介
https://hyper.is/