vimでrlsが動かない時

1 min read読了の目安(約700字

vim-lspとvim-lsp-settingsを使ってRustを書いているとたまにrlsが動いてくれない時があります。
例えば、Cargo.tomlよりも上のディレクトリーでgit管理している時とか。
↓こんな感じで

project/
| - .git/
| - somefiles/
| - rust-project/
  | - Cargo.toml
    | - src/

原因

vim-lsp-settings内のroot_uriという設定が.gitのあるディレクトリーを指しているのが原因です。
これをCargo.tomlがあるディレクトリーに設定できたら勝ちです。

解決方法

vimのg:lsp_settings_root_markersという変数を設定するのが1番簡単だと思います。お使いの.vimrcに以下を追加します。

let g:lsp_settings_root_markers = [
\	'Cargo.toml',
\	'.git/',
\]

開いているファイルの親ディレクトリーを辿っていって、この変数の要素とマッチするファイルを見つけたらそこをroot_uriにするって感じだと思います。
Rust用のCargo.tomlと、他でも使う.git/とかを書いておけば問題ないと思います。

参考

mattn/vim-lsp-settings#Configurations