Help us understand the problem. What is going on with this article?

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確認で + になっていれば問題なく使用できていると思います。

uyo
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away