TL;DR:
LC_CTYPE
環境変数を ja_JP.UTF-8
にセットしたら直った。
調査
vim を起動すると以下のエラーが出てクラッシュするようになった。
% vim
Fatal Python error: config_get_locale_encoding: failed to get the locale encoding: nl_langinfo(CODESET) failed
Python runtime state: preinitialized
エラーメッセージで検索すると Python のバグトラッカーのスレッドが見つかった。 https://bugs.python.org/issue39397
ロケールの設定ミスが指摘されている。また LC_CTYPE
環境変数を削除するようアドバイスされている。報告者自身は LANG
環境変数を削除したら問題が解決したようだ。
自分の環境を確認する。
% locale
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL=
% echo $LANG
ja_JP.UTF-8
% env | grep '^LC_ALL=' # 未定義
% env | grep '^LC_CTYPE=' # 未定義
LANG
環境変数が設定されている。 LC_CTYPE
環境変数は設定されていないため、 locale
コマンドによればロケール設定 LC_CTYPE
は ja_JP.UTF-8
になる。
自分の環境では LANG
環境変数の設定を変えたくないため他の解決策を探す。
ここで、エラーの発生箇所らしい nl_langinfo(CODESET)
の意味を調べた。 https://linuxjm.osdn.jp/html/LDP_man-pages/man3/nl_langinfo.3.html
nl_langinfo() 関数は、 localeconv(3) より柔軟なロケール情報へのアクセス方法を提供する。 ロケールカテゴリーの個々の要素や追加の要素を問い合わせることができる。
…
CODESET (LC_CTYPE) 選択されたロケールで用いられる文字エンコード名を示す文字列を返す。
nl_langinfo(CODESET)
はロケール設定 LC_CTYPE
と関係があるようだ。その値は、 LC_CTYPE
環境変数の(未定義なら LC_ALL
環境変数の、それも未定義なら LANG
環境変数の)値と等しいはず。自分の環境であれば、 LANG
環境変数の値と同じ ja_JP.UTF-8
になるはずだが、取得がうまくいっていないように見える。
試しに LC_CTYPE
環境変数を ja_JP.UTF-8
にセットしてみる。
% export LC_CTYPE=ja_JP.UTF-8
% vim
これで問題なく Vim が起動するようになった。
環境
Vim
% brew info vim
vim: stable 8.2.0654 (bottled), HEAD
Vi 'workalike' with many additional features
https://www.vim.org/
Conflicts with:
ex-vi (because vim and ex-vi both install bin/ex and bin/view)
macvim (because vim and macvim both install vi* binaries)
/usr/local/Cellar/vim/8.2.0654 (1,888 files, 32.6MB) *
Poured from bottle on 2020-05-02 at 10:16:41
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/vim.rb
==> Dependencies
Required: gettext ✔, lua ✔, perl ✔, python@3.8 ✔, ruby ✔
% grep '^Plug ' .vimrc
Plug 'Shougo/deoplete.nvim' " |deoplete_nvim|
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'
deoplete.nvim プラグインは Python 3 に依存する。このプラグインが Python 3 をロードしようとしてクラッシュしているように見える。
Python
% brew info python@3.8
python@3.8: stable 3.8.2 (bottled) [keg-only]
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python@3.8/3.8.2 (4,196 files, 64MB)
Poured from bottle on 2020-03-16 at 14:48:28
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/python@3.8.rb
macOS
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.3
BuildVersion: 19D76