トラブル概要
VimのUltiSnipsが突然エラーを吐き出した.文字を挿入しようとする毎に,UltiSnips#TrackChange関数が存在しない
旨のエラーを大量に流してきた.
調査した内容
- 公式のバグ再現ガイドに従って,Docker内でバグの再現を試みた→エラーを吐き出さなかった
- UltiSnips TrackChangeなどで検索した→関連情報は出てこなかった.
- .vimrcのバックアップを取り,vim-plugの最低限の関数呼び出しと,UltiSnipsに関する設定だけを残し,ほかを全部消去した.→Python3.7に関するライブラリが読み込めないというエラーが表示された.
- VimのUSEフラグを確かめた→VimがPython3.6でコンパイルされていた.
解決策
/etc/portage/make.conf
に以下の設定をした.
PYTHON_TARGETS="python2_7 python3_7" PYTHON_SINGLE_TARGET="python3_7"
そして@world
のemergeを試みた.
sudo emerge --ask --verbose --tree --update --deep --newuse --keep-going --with-bdeps=y @world
なおこのコマンド中には,Pythonのアップグレードには必要ないオプションがいくつかついているが,スクリプトとして保存してあったため,そのまま実行した.
そしてまた問題発生
Vimのコンパイル中,最後のリンクに失敗した.原因は,Python3.8が既にインストールされているため,Vimは3.8がPythonの最新バージョンと認識したが,VimのUSEフラグはPython3.7を指定したため,正常にPython3.7でコンパイルできなかった.
解決策
まずPython3.8をアンインストールした.
sudo emerge -cav "=dev-lang/python-3.8.0"
そして@world
のemergeをした.最後にPython3.8をインストールした.
反省
make.conf
のPYTHON_TARGETS
とPYTHON_SINGLE_TARGETS
はしっかり書こう.
そもそもこの問題が発生するまでPYTHON_TARGETS
の項が/etc/portage/make.conf
に記載されていなかった.