Mac で Vim を Python の開発環境にする。
大きく書き換えました。
主な変更点は次の 8 点です。
1. Vim → Neovim
2. 新規採用 → pycodestyle
3. 新規採用 → pydocstyle
4. NeoBundle → dein.vim
6. 新規採用 → deoplete.nvim
7. jedi-vim → deoplete-jedi
8. virtualenv → 削除(分離が可能になったので venv に更新し 別立て)
Neovim は Vim の後継機みたいなものです。
作業が完了すると vim は、次の3つの動作をするようになります。
① 構文の色付け
② 構文チェック Syntastic pyflakes
invalid syntax の指摘
③ 自動補完 jedi-vim
作業
大まかに分けて、これから次の6つのものを追加、インストールします。
項番 | 名前 | 説明 |
---|---|---|
Step1 | vim | vim の Python インターフェイスを有効にするため |
Step2 | ~/.vimrc | vim の設定ファイルに syntax on を追記 |
Step3 | Neobundle | vim プラグインのパッケージマネージャ |
Step4 | vim-virtualenv | virtualenvの環境にパスを通すためのvimプラグイン |
Step5 | pyflakes | Python の構文チェックツール |
Step6 | Syntastic | 構文チェックさせるための vim プラグイン |
Step7 | jedi-vim | 自動補完させるための vim プラグイン |
環境
本稿では vim について書いています。Python そのものの環境については、こちらに記載した環境を前提に進めさせていただきます。なお本稿では、pyenv を使わず Python2 あるいは Python3 どちらか一方のバージョンだけの Python を使っているものとして説明をさせていただきます。
Step1. vim の再インストール
vim の Python インターフェイスを有効にするために行います。Syntastic や jedi-vim は Python2 あるいは Python3 のコードを読み取って解析をしてくれるわけですが、肝心の vim にはいっている Python のバージョンと Mac の Python のバージョンが一致していないことがあります。
というか僕は一致していませんでした。そうすると Syntastic, jedi-vim が Python を読み込めなくなるので vim の Python インターフェイスのバージョンと Mac の Python のバージョンを揃えようという話であります。
Step1-1. vim に 当該 バージョンの Python のインターフェイスが有効になっているかを確認
それでは、まず、Python のインターフェイスが有効になっているかを確認してみましょう。
$ vim --version | grep python +cryptv +linebreak +python +viminfo +cscope +lispindent -python3 +vreplace
例えば上記の実行結果にある -python3
は、vim に Python3 が含まれていないことを表します。もし Python3 を使用している場合、 Python3 を含めて再コンパイルする必要があります。vim が何かと一緒にコンパイル?インストール?されているなんて初めて知ったし、この辺を知らないでかなり苦労しました。
もし、「vim に Python がはいっている」という話に、いまいちピンとこない方は vim のノーマルモードで以下のように打ち込んでみてください。 Python が実行されます。vim の中に Python を実行できるような環境があるのが確認できます。
:python print(sys.version) # Python2 :python3 import sys; print(sys.version) # Python3
Vimの言語インターフェースのバージョン確認 - Qiita
ここから先は Python3 を有効にし Python2 を無効にする作業を行います。もし、Python2 を使っている場合は、適宜 Python2 に読み替えてください。
Step1-2. +python3 となるように vim を再インストール
Step1-1 で -python3
と表示されていた場合、+python3
となるように vim を再インストールします。
ネットで調べてみるとこういうのを「vim の Python インターフェイスを有効にする」みたいな表現のされ方をしています。他にも「vim の Ruby インターフェイスを有効にする」など。
ここではパッケージマネージャーとして Homebrew を使用して、再インストールの作業を進めます。
$ $ # Step1-2-1. $ # いま何を有効にしているかを確認 $ vim --version $ $ # Step1-2-2. $ # vim のパスを確認 $ which vim /usr/bin/vim $ $ # Step1-2-3. $ # Homebrew でインストールする vim の情報を確認 $ # 指定できる option の一覧を見ることができます。 $ brew info vim vim: stable 7.4.944, HEAD ... ==> Options ... --with-python3 Build vim with python3 instead of python[2] support ... $ $ # Step1-2-4. $ # vim をインストール $ brew install vim --with-python3 ... 中略 ... $ $ # Step1-2-5. $ # path が変わっていることを確認 $ which vim /usr/local/bin/vim $ $ # path が /usr/bin/vim から /usr/local/bin/vim に $ # 変わっていますね。 $ # $ # $ # アンインストールもしていないのに $ # 元の /usr/bin/vim はどこに行ってしまったのでしょうか? $ # $ # Homebrew は $ # /usr/local/bin/ 配下にパッケージをインストールします。 $ # /usr/local/bin/ にはユーザが保存したコマンドが保存されます。 $ # $ # 一方... $ # /usr/bin/ にはデフォルトではいっているコマンドが格納されます。 $ # なので OS をアップデートすると一緒にアップデートされたりします。 $ # $ # なので、デフォルトの vim コマンド /usr/bin/vim は削除されていません。 $ # フルパスで指定すると実行できたりします。 $ /usr/bin/vim $ # http://dqn.sakusakutto.jp/2011/08/linux_usrlocal.html $ # http://nihaoshijie.hatenadiary.jp/entry/2014/07/13/103905 $ $ # Step1-2-6. $ # +python3 の表記を確認。 -python3 はダメ。 $ vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 1 2015 12:11:28) ... +conceal +libcall -python +vreplace +cryptv +linebreak +python3 +wildignore ...
ちなみに...
$ brew install vim --with-python3 --with-python としても $ # +python +python3 と両方 + にすることはできない。 $ $ # brew info vim の実行結果にあるオプションの一覧には $ # --with-python と言う option は無いしね。 $ $ vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 1 2015 12:11:28) ... +conceal +libcall -python +vreplace +cryptv +linebreak +python3 +wildignore
vimをアップデートすると同時にHomebrew管理に移行する - Qiita
初心者がVimをインストールするメモ - Qiita
Step1-3. backspace を有効にする。
その後、見事に backspace が効かなくなったため ~/.vimrc に次の1行を追記しました。
set backspace=indent,eol,start
Step1-4. Mac の Python3 と vim の Python3 のバージョンの確認
Mac の python3 と同じバージョンの python3 が vim にはいったことを確認しましょう。--with-python3
とすると、いま Homebrew ではいっている Python と同じバージョンの Python がはいります。
$ python3 -c 'import sys; print(sys.version)' 3.5.1 (default, Jan 16 2016, 10:24:21) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)] $ $ vim :python3 import sys; print(sys.version) 3.5.1 (default, Jan 16 2016, 10:24:21) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)]
Step3. Neobundle のインストール
Neobundle しか使ったことがないのですが、これまた優れた vim プラグインのパッケージマネージャらしく、本稿でもこれを用います。
GitHub には様々な vim プラグインが公開されています。Neobundle を使うと、その URL を ~/.vimrc に書くだけで、その vim プラグインがインストールできるようになります。
この後の Syntastic と jedi-vim は、この Neobundle を使ってインストールします。Neobundle そのもののインストールは、下記の手順をご参照ください。
公式インストール手順
ワイのインストール手順、ほぼ公式コピペ
Step4. vim-virtualenv インストール
vim は virtualenv のパスを参照していません。例えば、 virtualenv の環境下で Django を pip でインストールしていたとしても、jedi-vim は virtualenv へのパスがわからないので Django について補完処理を行ってくれません。そこで vim-virtualenv をインストールしていきます。
この Step4 の vim-virtualenv は、virtualenv と virtualenvwrapper の環境で pip でインストールした Python モジュールを jedi-vim が参照できるようにするための vim プラグインです。もし virtualenv と virtualenvwrapper をいれない場合、この Step4 の vim-virtualenv のインストールは不要になります。
vim-virtualenv 公式サイト
Step4-1. vim に virtualenv へのパスが含まれているか確認
以下は vim のノーマルモードです。virtualenv のパスが入っていません。
$ workon py3env (py3env)$ vim :python3 import sys :python3 for path in sys.path: print(path) /usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python34.zip /usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python3.4 /usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin /usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload /usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages _vim_path_
逆に仮想環境下 py3env 配下では、 virtualenv へのパスが含まれています。
$ py3env (py3env)$ python >>> import sys >>> for path in sys.path: print(path) /Users/user_name/.virtualenv/py3env/lib/python3.5/site-packages /Users/user_name/.virtualenv/lib/python35.zip /Users/user_name/.virtualenv/py3env/lib/python3.5 /Users/user_name/.virtualenv/py3env/lib/python3.5/plat-darwin /Users/user_name/.virtualenv/py3env/lib/python3.5/lib-dynload /usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5 /usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin
Step4-2. ~/.vimrc を編集
次の一文を~/.vimrc に追記します。
" https://github.com/davidhalter/jedi-vim からダウンロード&インストール NeoBundle 'davidhalter/jedi-vim'
どのあたりに追記するかは、以下のとおり。公式サイトにあった Sample .vimrc に追記するような形で記しています。
" Note: Skip initialization for vim-tiny or vim-small. if 0 | endif if has('vim_starting') if &compatible set nocompatible " Be iMproved endif " Required: set runtimepath+=~/.vim/bundle/neobundle.vim/ endif " Required: call neobundle#begin(expand('~/.vim/bundle/')) " Let NeoBundle manage NeoBundle " Required: NeoBundleFetch 'Shougo/neobundle.vim' " My Bundles here: " Refer to |:NeoBundle-examples|. " Note: You don't set neobundle setting in .gvimrc! " " ここに記載しています。 " " https://github.com/jmcantrell/vim-virtualenv からダウンロード&インストール NeoBundle 'jmcantrell/vim-virtualenv' call neobundle#end() " Required: filetype plugin indent on " If there are uninstalled bundles found on startup, " this will conveniently prompt you to install them. NeoBundleCheck
Step4-4. パスが追加されることを確認
:VirtualEnvActivate YOUR_VIRTUALENV_PROFILE_NAME
として virtualenv へのパスを切り替えます。
$ workon py3env (py3env)$ vim :VirtualEnvActivate py3env :python3 import sys :python3 for path in sys.path: print(path) /Users/user_name/.virtualenv/py3env/lib/python3.5/site-packages ↑ 1つ追加されました! 1つしか追加されていませんが、これで pip install したモジュールを jedi-vim が参照できるようになります。 pip install したモジュールは site-packages 配下に置かれます。 /Users/user_name/.vim/bundle/vim-virtualenv /Users/user_name/.vim/bundle/vim-virtualenv/autoload /Users/user_name/.vim/bundle/vim-django-support/lib /usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python35.zip /usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5 /usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin /usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload /usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages _vim_path_
1度 deactivate してパスがどう切り替わるかを確認して、動作を見てみると理解しやすいかもしれません。
:VirtualEnvDeactivate :python3 for path in sys.path: print(path)
ひとこと: Step1-4 で何故 vim の Python インターフェイスのバージョンと OS の Python のバージョンが一致しているかを確認したか。
なんでこんなこと確認しているの?かと言いますと、vim-virtualenv が vim の Python インターフェイスのバージョンに合わせたパスを設定してしまうからです。以下は Python3 の virtualenv の環境下で Python2(version 2.7) のインターフェイスを有する vim を起動、コマンドを入力した例になります。
$ workon py3env (py3env)$ # Python2 のインターフェイスが有効になっている (py3env)$ # Mac に最初から付いている vim を起動しましょう。 (py3env)$ # (py3env)$ /usr/bin/vim :NeoBundleInstall :VirtualEnvActivate py3env :python for path in sys.path: print(path) /Users/user_name/.virtualenv/py3env/lib/python2.7/site-packages /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip /Library/Python/2.7/site-packages ↑ 存在しない python2.7 配下の site-packages を参照してしまっている。 この 2.7 という数字は vim の Python インターフェイスのバージョンから来ています。 :python print(sys.version) 2.7.10 ...
何だよ、このパス揃えるためだけに、わざわざ vim を再インストールして "vim の Python インターフェイスのバージョン"と "Mac の Python のバージョン" を揃えたのかよって感じられるかもしれません。
ただ、"Mac の Python のバージョン" と "vim の Python インターフェイスのバージョン" を揃えない場合は、色々と作業が必要になってきます。
このページに来たワイのような初心者には厳しい作業だと感じたので、この方法になっています。
やり方は色々あるようです。やや面倒な様です。
Step5. pyflakes
pyflakes は Python の構文チェックツールです。構文的に間違ったコードを指摘してくれます。
Pythonのスタイルガイドとそれを守るための各種Lint・解析ツール5種まとめ!
Step5-1. インストール
$ pip install pyflakes
Step5-2. 動作確認
適当に構文を間違えた Python ファイルを作って動作を確認してみましょう。
$ pyflakes sample.py sample.py:1: undefined name 'newgame'
Step6. Syntastic
jedi-vim の次は、ぜひ Syntastic をいれてみましょう。Syntastic は vim の構文チェックツールです。Syntastic に pyflakes を使って構文解析をするように設定を進めていきます。
参考にした神様のサイト
ただ、上記のサイトでは pylint を指定していますが pyflakes を指定したほうが、このページに来たワイみたいな初心者の場合は良さそうです。何故なら pylint は死ぬほど指摘してくれるので、それを確認したり、直したりするだけで1ヶ月かかりそうだったので。チーム開発でコーディング規約を綿密に作るなら pyflakes の方が良いと感じますが。また pylint をいれると jedi-vim がエラーを吐くようになります。
pylint をインストールをすると jedi-vim がエラー - いっきに Python に詳しくなるサイト
Step6-1. ~/.vimrc に次の2行を追記
追記する場所は、vim-virtualenv
の真下くらい。
" syntastic のインストール NeoBundle 'scrooloose/syntastic' " syntastic に pyflakes を指定 " g => Global, l => Local " 代入 スコープ : 変数名 = 値 " let g : syntastic_python_checkers = ['pyflakes'] let g:syntastic_python_checkers = ['pyflakes']
Step6-3. 動作確認
間違った構文を入力して、syntax error を指摘してくれるかを確認してみましょう。保存 :w したタイミングでチェックをかけてくれます。
ひとこと: Django の template ファイルの構文解析
Django を使っている場合の話になりますが Syntastic をいれたあとに Django の template ファイルを修正よしようとすると、正しいにもかかわらず色々警告してくれます。これは Django の template ファイルの形式が、通常の html ファイルとは書式が若干異なるからです。そのため ~/.vimrc
に次の文言を追加すると、そう言った警告を出さなくなります。
VIM - how to open .html files with django html syntax rather than just html syntax? - Super User
" html 拡張子がついてたら Django の templateとして " 読み込んでね、という設定 autocmd FileType html setl filetype=htmldjango
あるいは都度 vim のノーマルモードで :setfiletype htmldjango
とすることでも、それを解消できます。
django.vim - Syntax highlighting for Django templates : vim online
vimでDjangoのテンプレートを開いたときに色を付ける方法 | Code & Business
Google グループ
Step7. jedi-vim インストール
jedi-vim のインストールについては 公式インストール手順 ならびに 公式マニュアルとは異なり NeoBundle を使ってインストールしています。
Step7-1. ~/.vimrc に次の1行を追記
追記する場所は、vim-virtualenv
の真下くらい。
" https://github.com/davidhalter/jedi-vim からダウンロード&インストール NeoBundle 'davidhalter/jedi-vim'
ひとこと: INSERT (paste)モード
INSERT (paste) モードになっていると、自動補完が効きません。INSERT モードに戻すには :set nopaste
:set paste
を指定するとINSERT (paste)モード になります。
... ペーストモードを自動で解除する方法 | 踊る犬.net
終わりに
Mac で vim を Python の開発環境にするためのごく最低限の作業について記述してみました。至らぬところもあると思いますが、他の方が書いた vim に関するサイトを見てもある程度、理解出来るように書いてみました。以降、その他の様々な ~/.vimrc の設定等について、設定を追加していけるようであれば、嬉しく存じます。
広告
先日 iMac (21.5-inch, Mid 2011) の HDD が故障したので SSD の換装してもらいました。個人的に好印象だったので、お礼広告です。
もともと HDD とは別のところからカタカタ変な音がしてて、直せんものやろと思ってたのですが、「DVDドライブ冷却用ファンの回転軸に汚れが付着してバランス崩してるみたいです」みたいな話をいただいて。追加料金は発生しましたが直してもらいました。
福岡ってのがちょっと難点ですが、個人的に好印象だったのはこの件だけではないのですが、とりあえずオススメですね。
ちなみに iMac の 21.5-inch ならクロネコヤマトのパソコン宅急便 BOX F にて搬送が可能です。それより多きいサイズ 27-inch は対応していません。
ヤマト運輸 パソコン宅急便
ちなみにHDD から SSD に換装してもらってからは死ぬほど快適です。換装前は遅くて死んでました笑
ちなみにさらにメモリを増設しています。メモリ増設 + SSD換装で 5年前の PC ですが、全然問題なく使用できています。
iMac にメモリを取り付ける - Apple サポート