Edited at

まじで最&高のvim環境を作りたい1

どうも、プログラミングを始めて一年ちょいくらいの初心者エンジニアです

普段はscalaを主に書いていて、ちょこちょこAngularとかも書いてます

両方vimを使って書いてますが、定義元ジャンプとか補完機能とかはやっぱりIDEとかVScodeの熱いプラグインが優秀すぎて。。。

じゃぁそっち使えよって話なんですが、基本的なターミナルでの操作がしっかりできるようになるまではIDEじゃなくてemacsとかvim使おうって会社のCTOに言われて確かにーと思ったので今はvimで開発しています

ちなみにCTOはeamcs派(エディタ戦争w)

でもやっぱり強い補完機能、定義元ジャンプ、構文エラーくらいは教えて欲しい。。。

そしたら最近vim-metalsとかいうプラグインが激アツとの情報が流れてきたので入れてみたんですが神すぎたので共有します

環境

OS
      MacOS

vimのプラグイン管理
Plug

terminal
hyper

言語
Scala

※ただちゃんと理解はできていないのでおかしいところあったら教えてください:bow_tone1:

それでは早速インストールしていきましょうー!!

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っていうコマンドラインインターフェースを使って最新の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と入力する

スクリーンショット 2019-05-25 22.50.37.png

頑張ってる

スクリーンショット 2019-05-25 22.53.49.png

でけた

スクリーンショット 2019-05-25 22.54.37.png


vimが最&高に近づいてることを確認

スクリーンショット 2019-05-25 22.58.11.png

怒ってくれた

Importとか

スクリーンショット 2019-05-25 23.03.20.png

こんな手厚い補完が...

選択すると

スクリーンショット 2019-05-25 23.03.29.png

全部書いてくれる。マジすばらしい

それだけじゃない!!

スクリーンショット 2019-05-25 23.05.25.png

なんとわざわざimport書かなくても、、、、、

スクリーンショット 2019-05-25 23.05.50.png

オートインポートしてくれる

しかもしかも!

メソッドの補完までしっかりと。

スクリーンショット 2019-05-25 23.06.23.png

importのソートもしてくれる

:SortScalaImports

ってコマンド打つとimportを言語の規定に沿ってsortしてくれる(いまいちわからんけど)

スクリーンショット 2019-05-25 23.10.36.png

.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)

適当にメソッドの上でgdとかやると

スクリーンショット 2019-05-25 23.41.33.png

GOD

スクリーンショット 2019-05-25 23.41.54.png


最&高に近づいたね

今回の記事に関係するリンクは以下です

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