blog.euxn.me

init.nvim にpython のpath を指定してneovim の起動速度を早くする

2017-05-05 Fri.

2017/5/13 編集 neovim のみの挙動であるとご指摘頂いたため修正しました。 global の python を指定するよう修正しました。


neovim で python を開いたり、editorconfig 等 python に依存する特定のライブラリを使用する場合、起動速度が遅くなることがあります。 nvim --startuptime vim.log とオプションを指定し vim を起動すると、実際にどこが遅いのか確認をすると、python の部分で大きく速度が遅いことがあります。 この部分ですが、python の path の解決に時間がかかっているようなので、python の path 情報を vimrc に記述することで早くなります。

init.nvim
1let g:python_host_prog = expand('~/.pyenv/shims/python2')
2let g:python3_host_prog = expand('~/.pyenv/shims/python3')

しかしこれでは早くなりませんでした。 ~/.pyenv/shims/python を確認すると、これは python バイナリではないことが分かりました。 pyenv の場合、python バイナリは ~/.pyenv/versions 以下にあります。

init.nvim
1let g:python_host_prog = expand('~/.pyenv/versions/miniconda2-latest/bin/python2')
2let g:python3_host_prog = expand('~/.pyenv/versions/miniconda3-latest/bin/python3')

しかし、バージョンをハードコーディングするのはイケていないため、どうにかします。

~~$ pyenv which python3 とすることで、python バイナリの path が出てくるので、このコマンドを vimrc 内で実行します。~~ > ~~let g:python_host_prog = systemlist('pyenv which python2 2>/dev/null || which python2')[0]~~ > ~~`let g:python3_host_prog = systemlist('pyenv which python3 2>/dev/null || which python3')[0]~~

↑ これではグローバルの python が呼ばれないため修正します。 => どこにいても pyenv の global の python を呼び出す shellscript

~~vim の system では、末尾の改行も含まれてしまうため、 systemlist の先頭要素を取得します。~~

systemlist の使用もこちらの方法で避けられます。 => shell の出力の末尾の改行を取り除く

init.nvim
1let g:python_host_prog = system('(type pyenv &>/dev/null && echo -n "$(pyenv root)/versions/$(pyenv global | grep python2)/bin/python") || echo -n $(which python2)')
2let g:python3_host_prog = system('(type pyenv &>/dev/null && echo -n "$(pyenv root)/versions/$(pyenv global | grep python3)/bin/python") || echo -n $(which python3)')

pyenv でない場合は which python の結果で良いため、pyenv を使用していない場合のフォールバックとして指定しておきます。

これによって起動が 0.2 秒ほど早くなりました。

Other Works
2024-12-01 Sun.
OpenAPI Spec を出力できる DSL、TypeSpec の実践例
- ドワンゴ教育サービス開発者ブログ

2024-11-16 Sat.
型付き API リクエストを実現するいくつかの手法とその選択
- TSKaigi Kansai 2024

2024-09-10 Tue.
corepack が標準同梱じゃなくなる未来、 mise でパッケージマネージャを管理する
- Zenn

2024-09-10 Tue.
言語環境の管理は *env や *vm を超えて、 mise へ
- Zenn

2024-06-28 Fri.
TypeSpec を使い倒してる
- Kyoto.js 22

2024-05-11 Sat.
Powerfully Typed TypeScript
- TSKaigi 2024

2024-05-10 Fri.
pnpm の node_modules を探検して理解しよう
- ドワンゴ教育サービス開発者ブログ

2024-03-17 Sun.
neverthrow で局所的に Result 型を使い、 try-catch より安全に記述する
- Zenn

2023-12-20 Wed.
レガシーブラウザ向けのビルドオプションを剪定する
- ドワンゴ教育サービス開発者ブログ

2023-05-26 Fri.
Next.js で dynamic import を使い Client だけで動かす Component を実現する
- Zenn

2023-05-02 Tue.
Node.js でファイル名から拡張子を取り除く/取り出すために path.parse を使う
- Zenn

2023-02-27 Mon.
WSL2 で外部からアクセス可能にするために bridge mode を有効にする
- Zenn

2023-01-26 Thu.
init.vim & dein から init.lua & lazy.nvim へ、シンプル設定で移行した
- Zenn

2023-01-13 Fri.
kindle の本をブクログ形式の csv でエクスポートする@2023初春
- Zenn

2023-01-10 Tue.
自宅サーバの移設に際して docker から nerdctl に移行した
- Zenn

2023-01-10 Tue.
自宅サーバを rootless に移行した際のトラブル対応
- Zenn

2021-11-11 Thu.
並列実行した Promise で throw されても全てハンドルしたいときの方法(allSettled, finally, etc...)
- Zenn