🐸

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

2021/10/13に公開

どうも、プログラミングを始めて一年ちょいくらいの初心者エンジニアです
普段はscalaを主に書いていて、ちょこちょこAngularとかも書いてます

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

じゃぁそっち使えよって話なんですが、基本的なターミナルでの操作がしっかりできるようになるまではIDEじゃなくてemacsとかvim使おうって会社のCTOに言われて一旦emacsを使い始めたんですが、emailはカスタマイズの記事がなさすぎて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っていう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)

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

GOD

###最&高に近づいたね

今回の記事に関係するリンクは以下です
Vim・Metals
vim-plug導入
https://github.com/blueshirts/darcula
https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md
[あなたの sbt update を爆速にする sbt-coursier の紹介]

Discussion