久違的更新一下 vim

1
$ brew upgrade vim

打開 vim 馬上出現一堆錯誤訊息

1
2
3
[vim-hug-neovim-rpc] failed executing: pythonx import [pynvim|neovim]
[vim-hug-neovim-rpc] Vim(pythonx):ModuleNotFoundError: No module named 'neovim'
E605: Exception not caught: [vim-hug-neovim-rpc] requires one of `:pythonx import [pynvim|neovim]` command to work

這些錯誤好熟悉,似乎是 vim 又找不到 python 的套件了

先檢查 vim 版本跟相依套件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ vim --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jun 01 2022 14:23:13)
macOS version - x86_64
Included patches: 1-5050
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):

...
+python3

...

Compilation: clang -c -I. ... -L/usr/local/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/lib/python3.10/config-3.10-darwin -lpython3.10

vim 確實有支援 python3,但居然是 Python 3.10。更新之前的 Python 套件是裝在 Python 3.9 裡,這樣要再重新安裝需要的 Python 套件了。

檢查系統預設的 Python 3 版本

1
2
python3 --version
Python 3.9.13

預設依舊是 Python 3.9,所以直接使用 pip3 install 安裝的套件 vim 是讀取不到的。

brew info 查詢 Python 3.10 的設定

1
2
3
4
5
6
7
8
$ brew info python@3.10
python@3.10: stable 3.10.4 (bottled) [keg-only]
...
You can install Python packages with
  /usr/local/opt/python@3.10/bin/pip3 install <package>
They will install into the site-package directory
  /usr/local/lib/python3.10/site-packages
...

說明直接寫了如果想要安裝套件可以使用的指令,只要直接使用 Python 3.10 的 pip3 執行檔下指令安裝即可。

依照說明下指令安裝缺少的 pynvimneovim

1
/usr/local/opt/python@3.10/bin/pip3 install pynvim neovim

我有把安裝 vim 寫成 Ansible playbook, 可以在 pip module 加上 executable 參數指定使用 Python 3.10 的 pip3 執行檔,就可以做到一樣的事情。

1
2
3
4
5
6
- name: Install python library for vim
  pip:
    executable: /usr/local/opt/python@3.10/bin/pip3
    name:
      - pynvim
      - neovim

安裝完畢後 vim 已可以正常工作

Reference