相変わらず飽きずにいろんなエディタに浮気しまくっているけど最近はvimが楽しい。

この間redditみてたら

こんなスレッドがあって

coc.nvimて見慣れないプラグインがあるなあと思ってみてみたら わかりやすそうだし、MPLSもバッチリつかえるっぽいから使ってみた。

インストール方法

僕はプラグインマネジャーにdeinを使ってるので

[[plugins]]
repo = 'neoclide/coc.nvim'
build = 'coc#util#install()'
hook_add = '''
  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)
  " Remap for rename current word
  nmap <leader>rn <Plug>(coc-rename)
  " Highlight symbol under cursor on CursorHold
  autocmd CursorHold * silent call CocActionAsync('highlight')
  " Use K for show documentation in preview window
  nnoremap <silent> K :call <SID>show_documentation()<CR>
  function! s:show_documentation()
    if &filetype == 'vim'
      execute 'h '.expand('<cword>')
    else
      call CocAction('doHover')
    endif
  endfunction
'''

これを記述する。

extensionのインストール

わかりやすいなぁ〜って感じたのがextensionの存在。

ここにだいたい書いてあるけど :CocInstallコマンドを使っていろんなlanguage serverに対応できるよということらしい。

たとえば僕はpythonが好きなので

:CocInstall coc-pyls

とすればpylsに対応できるという優れもの(もちろん別途pylsのインストールは必要ではあるが)。

インストールできるextensionの一覧は :CocList extensionsで確認できる。

MPLSと使用する

個人的にはpylsよりMPLSが使ってみたかった。 MPLSとは"M"icrosoftが作っている"P"ythonの"L"anguage “S"erverである。

VSCodeとかで使われているみたい。 以前VSCodeに浮気した時は、こんなにちゃんと(なにもしてないのに)補完できてしまうのか。。とびっくりした覚えがある。 上記ページにビルド方法が書いてあるのでやっておく。 そんなに時間はかからなかった。 できあがったものは python-language-server/output/bin/Debug/とかにあるかな。

coc.nvimで便利なのがjson形式で独自のlanguage serverのサポートができることだ。 設定ファイルとしてデフォルトでは$HOME/.config/nvim(nvimではなくvimの場合は$HOME/.vim)以下のcoc-settings.jsonを読み込んでくれる。 もちろんプロジェクト単位での設定も可能で、その場合はルートディレクトリに.vim/coc-settings.jsonを用意しておくと優先的に読み込んでくれる。

{
  "suggest.timeout": 5000,
  "languageserver": {
    "MPLS": {
      "command": "dotnet",
      "args": [
        "exec",
        "path/to/Microsoft.Python.LanguageServer.dll"
      ],
      "filetypes": ["python"],
      "initializationOptions": {
        "interpreter": {
          "properties": {
            "InterpreterPath": "path/to/python",
            "DatabasePath": "path/to/MPLS/output/dir",
            "Version": "{python version}"
          }
        },
        "searchPaths": [
          "path/to/site-packages",
          "path/to/app_root"
        ],
        "testEnvironment": false,
        "analysisUpdates": true,
        "traceLogging": true,
        "asyncStartup": true,
      }
    }
  }
}

こんな感じにしとくとpythonファイルを読み込んだ時に自動でMPLSが立ち上がる。 ちなみにここら辺の設定のキーはcoc-jsonをインストールしておくと補完可能である。便利。