どうも、プログラミングを始めて一年ちょいくらいの初心者エンジニアです
普段はscalaを主に書いていて、ちょこちょこAngularとかも書いてます
両方vimを使って書いてますが、定義元ジャンプとか補完機能とかはやっぱりIDEとかVScodeの熱いプラグインが優秀すぎて。。。
じゃぁそっち使えよって話なんですが、基本的なターミナルでの操作がしっかりできるようになるまではIDEじゃなくてemacsとかvim使おうって会社のCTOに言われて一旦emacsを使い始めたんですが、emailはカスタマイズの記事がなさすぎてvimに移行しました。
ちなみにCTOはeamcs派(エディタ戦争w)
でもやっぱり強い補完機能、定義元ジャンプ、構文エラーくらいは教えて欲しい。。。
そしたら最近vim-metalsとかいうプラグインが激アツとの情報が流れてきたので入れてみたんですが神すぎたので共有します
環境 | |
---|---|
OS | MacOS |
vimのプラグイン管理 | Plug |
terminal | hyper |
言語 | Scala |
※ただちゃんと理解はできていないのでおかしいところあったら教えてください
それでは早速インストールしていきましょうー!!
Vim・Metals
JDKのバージョン確認
$ java -version
openjdk version {1.8系}
JDKのバージョンが8系であることを確認してください
9から上はサポートされてないらしいのでもしバージョンが違う場合はJDK8に変えてください
Vimのバージョン確認
$ vim --version | head
VIM - 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.md
LSP(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-scala
au BufRead,BufNewFile *.sbt set filetype=scala
そんで:PlugInstall
してください
できたら~/.vim/coc-settings.json
に以下を追記してください
{
"languageserver": {
"metals": {
"command": "metals-vim",
"rootPatterns": ["build.sbt"],
"filetypes": ["scala", "sbt"]
}
}
}
次にCoursierっていうCLIを使って最新の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と入力する
頑張ってる
でけた
vimが最&高に近づいてることを確認
怒ってくれたImportとか
こんな手厚い補完が...
選択すると
全部書いてくれる。マジすばらしい
それだけじゃない!!
なんとわざわざimport書かなくても、、、、、
オートインポートしてくれる
しかもしかも!
メソッドの補完までしっかりと。
importのソートもしてくれる
:SortScalaImports
ってコマンド打つとimportを言語の規定に沿ってsortしてくれる(いまいちわからんけど)
.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)
###最&高に近づいたね
今回の記事に関係するリンクは以下です
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
よかたらこちらも〜〜〜
まじで最&高のvim環境を作りたい2