centos7 で ultisnips を使用する際に py3 import vim エラーが出る場合の対応

# 概要
vimはvimscript以外に他の言語でも機能を拡張できるようになっています。
ultisnipsはpy3コマンドを使うようになったのでvimのpython3環境が必要です。

### 以前のultisnips
```autoload/UltiSnips.vim
exec g:_uspy "import vim"
exec g:_uspy "from UltiSnips import UltiSnips_Manager" 
```
### 今のultisnips
```
py3 import vim
py3 from UltiSnips import UltiSnips_Manager
```

## 今のvimの状態を確認してみる
python3のところが **-** になっているのを **+** にします

```
$ vim --version
+acl               +eval              +modify_fname      +tag_old_static
+arabic            +ex_extra          +mouse             -tag_any_white
+autocmd           +extra_search      -mouseshape        -tcl
+autochdir         -farsi             +multi_byte        +termguicolors
+autoservername    +file_in_path      +multi_lang        +terminal
-balloon_eval      +find_in_path      -mzscheme          -termresponse
+balloon_eval_term +float             -netbeans_intg     +textobjects
-browse            +folding           +num64             +textprop
++builtin_terms    -footer            +packages          -tgetent
+byte_offset       +gettext/dyn       +path_extra        +timers
+channel           +guess_encode      +perl/dyn          +title
+cindent           -hangul_input      +persistent_undo   -toolbar
+clientserver      +iconv/dyn         -postscript        +user_commands
+clipboard         +insert_expand     +printer           +vartabs
+cmdline_compl     +job               +profile           +vertsplit
+cmdline_hist      +jumplist          +python/dyn        +virtualedit
+cmdline_info      +kaoriya           +python3/dyn       +visual
+comments          +keymap            +quickfix          +visualextra
+conceal           +lambda            +reltime           +viminfo
+cryptv            +langmap           +rightleft         +vreplace
+cscope            +libcall           +ruby/dyn          +vtp
+cursorbind        +linebreak         +scrollbind        +wildignore
+cursorshape       +lispindent        +signs             +wildmenu
+dialog_con        +listcmds          +smartindent       +windows
+diff              +localmap          +startuptime       +writebackup
+digraphs          +lua/dyn           +statusline        -xfontset
-dnd               +menu              -sun_workshop      -xim
-ebcdic            +migemo/dyn        +syntax            -xpm_w32
+emacs_tags        +mksession         +tag_binary        -xterm_save
```


# 解決策
## python3環境を作る
対応するバージョンを入れる

```
sudo yum install -y https://repo.ius.io/ius-release-el7.rpm
sudo yum install -y python35u python35u-libs python35u-devel python35u-pip
```

## vimのpython3を有効にしてビルド
### vimを持ってくる

```
git clone https://github.com/vim/vim.git
cd vim
```

### makefileをつくる
ディレクトリとか他に必要なものがある場合はそれぞれ付け足してください
その場合開発パッケージも忘れずに

```
sudo yum -y install ncurses-devel

./configure \
--enable-fail-if-missing \
--enable-python3interp \
--with-python3-config-dir=/usr/lib64/python3.5/config-3.5m \
vi_cv_path_python3=/usr/bin/python3.5

sudo make install
```

※以下のような問題があるためおとなしくpython3のみ対応する方がいい気がします。
https://vim-jp.org/vimdoc-ja/if_pyth.html
Python 2 と Python 3 をサポートするにはそれらを動的ロードする必要があります。
Linux/Unix システムで動的ロード時にグローバルシンボルをインポートすると、2 番
目にロードした Python が使われたときにクラッシュが発生します。そのため、グロー
バルシンボルをロードして一つの Python バージョンだけを使うか、グローバルシンボ
ルをロードしないかのどちらかしかありません。後者は特定のライブラリ (シンボルが
Vim から提供されていることを期待しているライブラリ) において Python の
"import" が失敗するようになります。


# おわり
先ほどのvim --version確認で + になっていれば問題なく使用できていると思います。