WindowsとcondaのPythonでvim-lsp-settingsを試す
vim-lsp-settingsがどのようなものかは
vim-lsp の導入コストを下げるプラグイン vim-lsp-settings を書いた。を参照してほしい。
ここではWindowsとcondaのPython(正確にはminiforgeのPython)でvim-lsp-settingsを試す方法を紹介する。
まずその手順を示す。
- https://vim-jp.org/ から Windows用の vim を install する
- https://github.com/conda-forge/miniforge から miniforge を install する
- Windowsの環境変数PATHに miniforge の「3つの」PATHを追加する
-
conda install git
で git を installする -
vim-plug を次のpowershellコマンドで install する
iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |` ni $HOME/vimfiles/autoload/plug.vim -Force
-
:edit ~/_vimrc
で_vimrcを作成・保存後 vimを再起動し:PlugInstall
- 何らかの.py fileを開き
:LspInstallServer
- vim再起動 何らかの.py fileを開く
になる。次に手順の詳細を示す。
Windowsの環境変数PATHに miniforge の「3つの」PATHを追加する
vim-lsp-setting は conda init が生成する「conda環境を有効化するスクリプト」を実行しない。
そのためWindowsの環境変数PATHに下記を追加する必要がある。
- CONDAのROOTDIR (例 C:\Users\kozo2\miniforge3)
- CONDAのROOTDIR\Scripts
- 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
を実行する。
:LspInstallServer
何らかの.py fileを開き vim-lsp-settingsはvimが開いているfiletypeに基づき適当なlanguage serverをinstallしてくれる。何らかの.py fileをvimで開いた後 :LspInstallServer
を実行するとvim-lsp-settingsは下記を行ってくれる。
- Pythonのlanguage server用のvenv環境を作り
- 1.にpip install 'python-language-server[all]' を install し
- 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