Vim で python の開発環境を整える vim-lsp 使用
vim-lsp
補完、定義へのジャンプとか
$ pip install python-language-server
vim-lsp (, mypy, flask8)
Linter
$ pip install pyls-mypy flake8 mypy
black, isort
Formatter
$ pip install black isort
vim-lsp
サーバーを入れる
$ pip install python-language-server
プラグインを入れる
code:vimrc
Plug 'prabirshrestha/vim-lsp'
Plug 'prabirshrestha/async.vim'
設定
code:vimrc
" デバッグ
let g:lsp_log_verbose = 1
let g:lsp_log_file = expand('~/vim-lsp.log')
augroup MyLsp
autocmd!
if executable('pyls')
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'pyls',
\ 'cmd': { servier_info -> 'pyls' }, \ 'workspace_config': {
\ 'pyls': {
\ 'plugins': {
\ 'jedi_definition': {
\ 'follow_imports': v:true,
\ 'follow_builtin_imports': v:true
\ },
\ }}}
\})
autocmd FileType python call s:configure_lsp()
endif
augroup END
function! s:configure_lsp() abort
" omnifunc を設定
setlocal omnifunc=lsp#complete
nnoremap <buffer> gd :<C-u>LspDefinition<CR>
nnoremap <buffer> gD :<C-u>LspReferences<CR>
nnoremap <buffer> K :<C-u>LspHover<CR>
endfunction
" sign の表示を無効化 ( ALE で行うため )
let g:lsp_diagnostics_enabled = 0
flake8
pyls で flake8 はもう少しで使えるようになるのかな?
以下の Issue でできるかな?
mypy
$ pip install pyls-mypy
設定
以下のように設定する
code:vim
augroup MyLsp
autocmd!
if executable('pyls')
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'pyls',
\ 'cmd': { servier_info -> 'pyls' }, \ 'workspace_config': {
\ 'pyls': {
\ 'plugins': {
\ 'jedi_definition': {
\ 'follow_imports': v:true,
\ 'follow_builtin_imports': v:true,
\ },
\ 'pyls_mypy': {
\ 'enabled': 1,
\ },
\ }
\ }}
\})
autocmd FileType python call s:configure_lsp()
endif
code:python
@hookimpl
def pyls_lint(config, document):
live_mode = config.plugin_settings('pyls_mypy').get('live_mode', True)
if live_mode:
args = ['--incremental',
'--show-column-numbers',
'--follow-imports', 'silent',
'--command', document.source]
else:
args = ['--incremental',
'--show-column-numbers',
'--follow-imports', 'silent',
document.path]
引数を調べてみる
--incremental
型情報をキャッシュに保存し、高速化を図る
--show-column-numbers
列情報を追加する
--follow-imports, silent
silent:インポートされているモジュール無いも見に行くけど、警告は表示しない
skip は とりあえず Any で置き換えるため、silent のほうがいいのかな?
--command document.source
document.source を mypy の対象とする
live_mode を false にした場合、ファイルを保存しないと、mypy が実行されない (ファイルを対象にしているため)
live_mode を true にした場合、ファイル内のテキストを渡しているため、保存する必要がない
以下の引数を渡せるようにしたい...
--ignore-missing-imports
--follow-imports=skip
--namespace-packages
参考文献