Humanity

Edit the world by your favorite way

Vimが落ちる時はif_python等を疑ってみよう

if_python以外にもif_perl、if_rubyでも起こりうるが、対処法としては同じなので割愛する。
またVimプラグインでif_pythonがよく使われているので*1、一番問題が起きやすいと思う。

  1. 「:version」の結果に「+python/dyn」*2があり、
  2. コマンドプロンプトで「where python*.dll」*3するとDLLが存在するなら*4

Vimは正しいDLLをロードできずに落ちている可能性がある。
つまり2で見えているDLLはOSが32bit版なら64bit版、OSが64bit版なら32bit版のDLLの可能性がある。

解決法

OSが32bit版なら32bit版、OSが64bit版なら64bit版のPythonインストーラを、python.org からダウンロードしてインストールする。
インストールするPythonのバージョンは(どちらがロードされようとしているか分からないので)Python 2系とPython 3系どちらもインストールした方がいい。

Download Python | Python.org

インストールすると「C:\Windows\system32」に正しいDLLがインストールされるはず。
「C:\Windows\system32」は優先してロードされる*5ので、既存の見えているDLLは削除したりする必要はない。*6


if_perlやif_rubyの場合も同じだと思う。
ただActivePerlとかStrawberryPerlとかRubyにもいくつかあったと思うけど、
今回問題が起きたのはPythonだったので分からない。

*1:観測範囲の問題かもしれない。要出典

*2:if_perlの場合は+if_perl/dyn。if_rubyの場合は+if_ruby/dyn

*3:if_perlの場合はwhere perl*.dll。if_rubyの場合はwhere ruby*.dll

*4:自分の場合はTortoiseHgのDLLがヒットした

*5:特にVimだとPATH環境変数の順序関係なく優先してロードしようとする。詳しくは https://github.com/vim-jp/issues/issues/449 (このパッチってtodo入りしたらしいけど、取り込まれたんだろうか…?)

*6:そもそも削除したらそのPython DLLを使ってる他のプログラムに支障が出る。