LoginSignup
5

More than 3 years have passed since last update.

posted at

updated at

Organization

Vim(NeoVim)でSwift -プラグイン, LSPの導入まで-

こんにちは
みなさん, Vim(NeoVim)やってらっしゃいますでしょうか.

私は最近になってようやくvimを真面目に触り始めました.
普段(?)swiftを書いているのですが,vimでもXcodeばりに補完やハイライトができると嬉しいなと思い,設定してみました.
deopleteを使った記事はあったのですが,coc.nvimを使ったものはなさそうなので,記事にしました.

環境

  • OS: macOS Mojave 10.14.6
  • NeoVim: NVIM v0.4.2, Build type: Release, LuaJIT 2.0.5
  • Swift: Apple Swift version 5.1 (swiftlang-1100.0.270.13 clang-1100.0.33.7)
  • Xcode: Version 11.0 (11A420a)

プラグインマネージャはvim-plugを使っています.
シンプルで使いやすいです.
vim-plugの導入方法はググるとすぐ出てくるので割愛します.

シンタックスハイライト

swiftはデフォルトではハイライトされないため,構文ファイルを作る,またはプラグインを導入する必要があります.
今回は以下のプラグインを使います.

keith/swift.vim

インストール

init.vimに以下を記述します.

init.vim

call plug#begin('~/.vim/plugged')
:

" 👇これを記述
Plug 'keith/swift.vim'

:
call plug#end()

セーブしてneovimを起動, :PlugInstall でインストールされます.
これでシンタックスハイライトが効くようになりました.

補完

vimで補完機能を有効にするに当たって,いくつか選択肢があります.

  • deoplete
  • coc.nvim
  • vim-lsp

精査はしていないですが,coc.nvimがスター数も多く,設定も直感的であったため,coc.nvimを使うことにしました.
coc.nvim

deopleteはよくわかりませんが,coc.nvimとvim-lspはLanguage-Server-Clientという点で,補完のアプローチはほとんど同じだと思います.

coc.nvimはtypescriptで実装されており,vim-lspはvimscriptで実装されています.
vimだけで完結させたい方はvim-lspの方が良いかもしれません.

coc.nvimのインストール

init.vimに以下を記述します.

init.vim
call plug#begin('~/.vim/plugged')
:

" 👇これを記述
Plug 'neoclide/coc.nvim', {'branch': 'release'}

Plug 'keith/swift.vim'
:

call plug#end()

セーブしてneovimを起動, :PlugInstall でインストールされます.

インストール後は:Coc*系のコマンドが使えるようになります.
:CocConfigでcocの設定ファイルを開き,そこに設定を書いていくといった流れになります.

Language-Server-Protocolの導入

coc.nvimはlanguage-server-clientであるため,単体では意味をなさず,言語ごとのlanguage-server-protocol(以下LSP)を動かす必要があります.
swiftのLSPとしてSourceKit-LSPがあるのでそれを利用します.

sourcekit-lspのインストール

ソースからbuildします.(Swift5.1以上が必要)

適当なディレクトリでhttps://github.com/apple/sourcekit-lsp.git をcloneします.
その後sourcekit-lspに移動し,buildします.
実行ファイルのあるディレクトリに移動し,./sourcekit-lspを実行してエラーが起きなければインストール完了です.
sourcekit-lspの実行ファイルをpathが通っているディレクトリに置いておく方が良いかもしれません.

以下は実行するコマンドです.

$ git clone https://github.com/apple/sourcekit-lsp.git
$ cd sourcekit-lsp
$ swift build -c release 👈 そこそこ時間がかかります
$ mv .build/release/sourcekit-lsp /usr/local/bin 👈 やらなくてもヨシ

cocの設定

neovimを起動します.
:CocConfigでcocの設定ファイルを開き以下を記述します.

coc-settings.json
{
  "suggest.enablePreselect": true,
  "languageserver": {
    "swift": {
      "command": "<sourcekit-lspの絶対パス>",
      "filetypes": ["swift"]
    }
  }
}

お疲れ様でした!
これでswiftの補完が効くようになりました👍

また,他の言語でもLSPを用意すれば補完やコードジャンプなどができるようになります.
LSPの例として

  • ruby: solargraph
  • python: pyls

などがあります.

閑話

設定したのはいいものの,果たしてVimでSwiftを書くタイミングはくるのか?
iOSアプリ開発であればXcode一択なのでは...

References

vscodeでswift5.1のSourceKit-LSPを動かす

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
What you can do with signing up
5