TIL

Today I Learned. 知ったこと、学んだことを書いていく

mypyとjedi-vimで補完を強くする - Vim

Pythonで型アノテーションを使いたくなって、どうせならVimでも補完できるようにしたいと思って、やってみた

Python3が有効になっているか確認

まずはVimでPython3が有効になっているか確認する
もし有効になっていない場合、ここを参考にして、有効にする

$ pip3 install -U flake8 mypy-lang jedi

neomakeを入れる

非同期で型、スタイルチェックを行うにはneomakeを使う

neomake/neomake: Asynchronous linting and make framework for Neovim/Vim

call dein#add('neomake/neomake')

...
let g:neomake_python_enabled_makers = ['python', 'flake8', 'mypy']

autocmd FileType python setlocal omnifunc=jedi#completions
if !exists('g:neocomplete#force_omni_input_patterns')
    let g:neocomplete#force_omni_input_patterns = {}
endif
let g:neocomplete#force_omni_input_patterns.python = '\%([^. \t]\.\|^\s*@\|^\s*from\s.\+import \|^\s*from \|^\s*import \)\w*'

syntasticを入れる

なんとなくsyntasticも入れた

vim-syntastic/syntastic: Syntax checking hacks for vim

call dein#add('scrooloose/syntastic')

...

let g:syntastic_check_on_open = 1
let g:syntastic_python_checkers = ['flake8', 'pep257', 'mypy']
let g:syntastic_python_flake8_args = '--max-line-length=120'

入れるときにエラーとかのメモ

以下の記述を書かないとエラーになった

if !exists('g:neocomplete#force_omni_input_patterns')
    let g:neocomplete#force_omni_input_patterns = {}
endif

こんなエラー

E121: Undefined variable: g:neocomplete#force_omni_input_patterns

あと、無効にしていたから、動作しなくて焦った

let g:jedi#completions_enabled = 0

jedi#completetions_enabledは、jedi-vimの補完を有効にするかどうかってことらしい。deoplete-jediを使うときにはこれを無効(0)にするらしい

参考文献