Windows+gVim+Poetryのpython開発環境構築

# 目標
Windows+gVim+Poetryで開発をするときに、ライブラリのコード補完やリンターが効くような環境を構築する。

# gVimインストール
* [kaoriyaサイトのダウンロードページ](https://www.kaoriya.net/software/vim/])からダウンロード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33407/976b3cab-7210-baa3-8dff-5034f32c8afc.png)

* ダウンロードしたzipを展開し、gvim.exeがあるフォルダをPATHに追加する。

# git for windowsのインストール
* [git for windows公式サイト](https://gitforwindows.org/)からダウンロード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33407/dc36342f-6f56-383e-77c0-ad2c675638a0.png)

* ダウンロードしたインストーラを実行する
* オプション等は特に変更する必要なし。


# vimプラグインのインストール
* vimプラグインであるvim-lsp,ALEをインストールします。
* powershellで下記コマンドを実行
    - 独自にパッケージ管理をしている方はそちらでインストールしてください

```powershell
cd ~
New-Item vimfiles/pack/mypackage/opt -ItemType Directory
cd vimfiles/pack/mypackage/opt
git clone https://github.com/prabirshrestha/vim-lsp.git
git clone https://github.com/prabirshrestha/async.vim.git
git clone https://github.com/dense-analysis/ale.git
```

~/_vimrcに下記追記

```vimscript
let g:ale_completion_enabled = 1
packadd ale 
let g:ale_lint_on_save = 1
let g:ale_sign_column_always = 1
packadd async.vim
packadd vim-lsp
let g:lsp_diagnostics_enabled = 0 " エラー表示はALEで行う
function! s:configure_lsp() abort
  setlocal omnifunc=lsp#complete
  nnoremap <buffer> <C-]> :<C-u>LspDefinition<CR>
  nnoremap <buffer> gd :<C-u>LspDefinition<CR>
  nnoremap <buffer> gD :<C-u>LspReferences<CR>
  nnoremap <buffer> gs :<C-u>LspDocumentSymbol<CR>
  nnoremap <buffer> gS :<C-u>LspWorkspaceSymbol<CR>
  nnoremap <buffer> gQ :<C-u>LspDocumentFormat<CR>
  vnoremap <buffer> gQ :LspDocumentRangeFormat<CR>
  nnoremap <buffer> K :<C-u>LspHover<CR>
  nnoremap <buffer> <F1> :<C-u>LspImplementation<CR>
  nnoremap <buffer> <F2> :<C-u>LspRename<CR>
endfunction

"python用設定
if executable('pyls')
    augroup lsp_pyls_enable
        autocmd!
        autocmd User lsp_setup call lsp#register_server({
                    \ 'name': 'pyls',
                    \ 'cmd': {server_info->['pyls']},
                    \ 'whitelist': ['python'],
                    \ })
        autocmd FileType python call s:configure_lsp()
        autocmd FileType python imap <expr> . ".\<C-X>\<C-O>"
    augroup end
endif
```

# pythonのインストール
* [pythonの公式サイト](https://www.python.org/downloads/windows/)から使いたいバージョンのpythonインストーラをダウンロード
* 今回はpython3.7.5をダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33407/8247e3fe-1eae-1cb3-3b7b-6f45c9c8d9c8.png)

* ダウンロードしたインストーラを実行する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33407/44939b82-c437-6191-e647-d7034bf4166f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33407/b46d5d79-12d5-8910-f47b-0a05b8b426ae.png)



# Visual C++ 再配布パッケージのインストール
* コード補完で使うpython-language-serverのインストールに必要
* [Visual C++ ダウンロードページ](https://visualstudio.microsoft.com/ja/downloads/)からインストーラをダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33407/56d8fec7-b7f6-d88b-3fce-ea46c52a7203.png)
* ダウンロードしたインストーラを実行する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33407/59f6cc26-7903-93fd-238f-3344010fc361.png)


# poetryのインストール
* powershellを起動し下記コマンドを実行する

```powershell
pip install --user --upgrade pip
pip install poetry
```

# Poetryプロジェクトの作成
* プロジェクトを作成したいディレクトリで下記コマンドを実行

```powershell
poetry new testproject
cd testproject
poetry add --dev python-language-server
poetry add --dev flake8
```



# gVim起動
* gVimを起動するときはpoetry shellに入ってから起動する

```powershell
cd testproject
poetry shell
gvim main.py
```

* ファイルを保存したときにpep8に準拠していなければエラー箇所が表示されます
* 補完は`<C-x><C-o>`でできますが、.(ドット)を入力後は自動で補完がでます