👻

WindowsとcondaのPythonでvim-lsp-settingsを試す

2021/01/04に公開

vim-lsp-settingsがどのようなものかは
vim-lsp の導入コストを下げるプラグイン vim-lsp-settings を書いた。を参照してほしい。

ここではWindowsとcondaのPython(正確にはminiforgeのPython)でvim-lsp-settingsを試す方法を紹介する。
まずその手順を示す。

  1. https://vim-jp.org/ から Windows用の vim を install する
  2. https://github.com/conda-forge/miniforge から miniforge を install する
  3. Windowsの環境変数PATHに miniforge の「3つの」PATHを追加する
  4. conda install git で git を installする
  5. vim-plug を次のpowershellコマンドで install する
    iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
     ni $HOME/vimfiles/autoload/plug.vim -Force
    
  6. :edit ~/_vimrc で_vimrcを作成・保存後 vimを再起動し :PlugInstall
  7. 何らかの.py fileを開き :LspInstallServer
  8. vim再起動 何らかの.py fileを開く

になる。次に手順の詳細を示す。

Windowsの環境変数PATHに miniforge の「3つの」PATHを追加する

vim-lsp-setting は conda init が生成する「conda環境を有効化するスクリプト」を実行しない。
そのためWindowsの環境変数PATHに下記を追加する必要がある。

  1. CONDAのROOTDIR (例 C:\Users\kozo2\miniforge3)
  2. CONDAのROOTDIR\Scripts
  3. CONDAのROOTDIR\Library\bin

conda install git で git を installする

gitはcondaでinstallしなくてもよいが、先の手順でconda環境にパスを通しているのでこうしてgitをinstallすると楽ではある

:edit ~/_vimrc と vim再起動 :PlugInstall

下記の _vimrc を作る

call plug#begin('~/.vim/plugged')
Plug 'prabirshrestha/vim-lsp'
Plug 'mattn/vim-lsp-settings'
call plug#end()

この_vimrcを作ったら、vimを再起動して :PlugInstall を実行する。

何らかの.py fileを開き :LspInstallServer

vim-lsp-settingsはvimが開いているfiletypeに基づき適当なlanguage serverをinstallしてくれる。何らかの.py fileをvimで開いた後 :LspInstallServerを実行するとvim-lsp-settingsは下記を行ってくれる。

  1. Pythonのlanguage server用のvenv環境を作り
  2. 1.にpip install 'python-language-server[all]' を install し
  3. 2.をvim-lspが利用するためのスクリプトを生成

これでセットアップは完了である。

vim再起動 何らかの.py fileを開く

と下記のようにPython用の vim-lsp が機能していることがわかる

この画像ではpycodestyleから怒られている箇所と、カーソル上の変数の参照箇所が自動でハイライトされていることが確認できる。
ここでは「先の _vimrc のように設定を全く行っていない」ことを強調したい。

vim-lsp-setting のPython設定で何ができるのか

自分が確認した限りでは下記コマンド以外は(まだ?)利用できないように感じた。

  • :LspDefinition カーソルの下の単語の定義に移動
  • :LspDocumentDiagnostics 現在のコードバッファに対するpyflakesのErrorとpycodestyleのWarningを列挙
    • :LspNextDiagnostic 説明略
    • :LspPreviousDiagnostic 説明略
    • :LspNextError 説明略
    • :LspPreviousError 説明略
    • :LspNextWarning 説明略
    • :LspPreviousWarning 説明略
  • :LspDocumentFormat pycodestyleのWarningを正す
  • :LspDocumentSymbol module, function, variable のシンボル名を列挙
  • :LspReferences 変数の参照箇所を列挙
    • :LspPreviousReference 説明略
    • :LspNextReference 説明略
  • :LspStatus 今どういったlanguage serverを使っているか、その状態を表示

vscode-python, pycharm と比較して何を感じたか

:LspDefinition で vscode-python における下記画像のように「自前(conda)環境中のPython packageの定義に移動する」ための設定方法がわからなかった。

vscode-pythonやpycharmの利用者なら下記画像のように「複数のPython環境の中から "このPython環境を使う" と指定すると、その環境中にinstallされたPython packageの定義にF12なりのキーで移動(もしくはインライン表示)できる」という思いこみがあるだろう

がvim-lsp-setttingでそういった「"このPython環境を使う"」という指定を行う方法はわからなかった。さらに言うと 「Pythonのlanguage-server」と「"このPython環境を使う"」のPythonが同一であるべきなのか否かもわからなかった。

まとめ

こういったことを試すに至ったそもそもの動機が
WindowsのGvimでPythonを活用したvimrcの例の冒頭で述べたように
vscode-pythonやpycharmの実装に不満を持ったからなのだが、vimもなかなか大変そうとへこたれたのが正直なところだ。

前段落のようなPythonの厄介さ(condaのような亜種の存在、1OS内に複数のPython環境)、language-serverとPython環境の接続なども内部でやってくれているのだから構成が複雑になるのも致し方なかろうと思い改めるようになった。
そもそもエディタ、プログラミング環境の連携を行う機能の実装はハードなのかもと。

以上。

Discussion