ふるつき

v(*'='*)v かに

vim-lsp + pylsでpipenvにインストールしたパッケージから補完する

表題のとおりです。昔jedi-vimを使ってたときもそんなことをしていましたね。

furutsuki.hatenablog.com

pylsは$VIRTUAL_ENVをみて補完してくれるらしいので、それを設定してやるだけでうまく行きました。

https://github.com/theoremoon/dotfiles/blob/2c9db8cd7a76ddb0756cb7f4ae901f0f7a6a827e/.config/nvim/init.vim#L307

function! s:findRoot(target)
  let dir = getcwd()
  while 1
    let files = split(globpath(l:dir, '*'), '\n')
    for f in l:files
        if a:target == fnamemodify(f, ':t')
            return l:dir
        endif
    endfor
    if l:dir == "/"
      break
    endif
    let dir = fnamemodify(l:dir, ':h')
  endwhile
  return ""
endfunction

function! s:setVenv()
  let dir = s:findRoot('Pipfile')
  echo l:dir
  if dir != ""
    let $VIRTUAL_ENV = trim(system("cd " . l:dir . "; pipenv --venv"))
  endif
endfunction
autocmd FileType python call s:setVenv()