9
6

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(NeoVim)でSwift -プラグイン, LSPの導入まで-

Last updated at Posted at 2019-11-06

こんにちは
みなさん, 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を動かす

9
6
2

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
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?