180
177

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-05-25

どうも、プログラミングを始めて一年ちょいくらいの初心者エンジニアです
普段は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と入力する
スクリーンショット 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

180
177
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
180
177

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?