为什么需要这篇博客

  1. Debian13默认使用Python3.13,由于其Breaking Change(import_module)移除导致vim初始化报错,所以需要手动下载py310的源码包以提供vim编译

  2. 以解决YouComplateMe插件的适配问题

步骤

一、 安装Python3.10


  1. 下载python3.10的源码包

wget https://www.python.org/ftp/python/3.10.18/Python-3.10.18.tar.xz

  1. 解压(我这里使用zsh自带的万能解压命令)

x Python-3.10.18.tar.xz
# 或者
tar -xzf Python-3.10.18.tgz

  1. 进入目录并配置编译选项

#这里一定要记得安装ssl依赖
sudo apt install libssl-dev libffi-dev

LD_FLAGS="-rdynamic"

cd Python-3.10.18

./configure --prefix=/opt/python3.10 \
--enable-shared \
--enable-optimizations \
--with-system-ffi \
--with-computed-gotos \
--enable-loadable-sqlite-extensions \
--with-openssl=/usr
  1. 开始编译Python

make -j$(nproc)
  1. 安装(这里千万注意,避免覆盖系统自带的python)

sudo make altinstall  # 使用 altinstall 避免覆盖系统 python
  1. 创建符号链接

sudo ln -sf /opt/python3.10/bin/python3.10 /opt/python3.10/bin/python3
  1. 修复动态链接库

# 创建配置文件
sudo tee /etc/ld.so.conf.d/python3.10.conf <<EOF
/opt/python3.10/lib
EOF

# 更新动态链接库缓存
sudo ldconfig

# 验证是否生效
sudo ldconfig -p | grep python3.10
  • 应该能看到类似输出:

    • libpython3.10.so.1.0 (libc6,x86-64) => /opt/python3.10/lib/libpython3.10.so.1.0

      libpython3.10.so (libc6,x86-64) => /opt/python3.10/lib/libpython3.10.so

  1. 验证SSL是否可用(防止后面出现问题)

/opt/python3.10/bin/python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"

二、克隆并编译Vim

  1. 克隆仓库

git clone https://github.com/vim/vim
  1. 配置编译选项

./configure --with-features=huge \                                  
--enable-multibyte \
--enable-python3interp=dynamic \
--enable-cscope \
--enable-gui=auto \
--enable-gtk2-check \
--enable-fontset \
--enable-largefile \
--disable-netbeans \
--with-compiledby="qcqcqc@zust.online" \
--enable-fail-if-missing \
--prefix=/usr/local \
--with-python3-config-dir=/opt/python3.10/lib/python3.10/config-3.10-x86_64-linux-gnu \
--with-python3-command=/opt/python3.10/bin/python3
我来详细解释这些 vim 编译选项的含义:

基础配置选项

--with-features=huge

含义:启用所有可用功能的最大功能集

选项:tiny, small, normal, big, huge

效果:包含语法高亮、多窗口、自动补全、插件支持等所有高级功能

--prefix=/usr/local

含义:指定安装路径前缀

效果:vim 将安装到 /usr/local/bin/vim,手册页到 /usr/local/share/man 等

编码和国际化

--enable-multibyte

含义:启用多字节字符支持

效果:支持 UTF-8、中文、日文等非 ASCII 字符集

重要性:对中文用户必需

--enable-fontset

含义:启用字体集支持

效果:在GUI模式下支持复杂的字体显示和字体选择

编程语言集成

--enable-python3interp

含义:启用 Python 3 解释器支持

效果:可以在 vim 中运行 Python 3 脚本,支持基于 Python 的插件

--with-python3-config-dir=...

含义:指定 Python 3 配置文件目录

效果:告诉编译器在哪里找到 Python 3 的头文件和编译参数

--with-python3-command=/opt/python3.10/bin/python3

含义:指定要使用的 Python 3 命令路径

效果:vim 将使用这个特定的 Python 解释器

开发工具集成

--enable-cscope

含义:启用 cscope 支持

效果:代码浏览工具,可以快速查找函数定义、调用关系等

用途:主要用于 C/C++ 开发

图形界面相关

--enable-gui=auto

含义:自动检测并启用可用的图形界面

选项:gtk2, gtk3, qt, motif, athena, neXtaw, auto, no

效果:如果检测到图形库,会编译 gvim(图形版本)

--enable-gtk2-check

含义:检查并启用 GTK2 支持

效果:优先使用 GTK2 作为图形界面toolkit

注意:GTK2 比较老,现在多用 GTK3

文件和系统支持

--enable-largefile

含义:启用大文件支持

效果:可以编辑超过 2GB 的大文件

重要性:现代系统必需

网络功能

--disable-netbeans

含义:禁用 NetBeans 集成支持

原因:NetBeans 集成很少使用,禁用可以减少依赖

编译控制

--enable-fail-if-missing

含义:如果指定的功能缺少依赖,编译失败而不是跳过

效果:确保所有指定的功能都被正确编译

好处:避免"静默失败",确保功能完整

--with-compiledby="qcqcqc@zust.online"

含义:设置编译者信息

效果:在 :version 命令中显示编译者信息

用途:标识自定义编译版本

  1. 开始编译并安装

export LDFLAGS="-rdynamic" # 启用动态库支持
sudo make install 

  1. 检查是否已经启用python3支持

/usr/local/bin/vim --version | grep python

可以看到类似如下的输出:

➜  vim git:(main) ✗ /usr/local/bin/vim --version | grep python
+cmdline_hist      +langmap           -python            +viminfo
+cmdline_info      +libcall           +python3           +virtualedit
链接方式: gcc -rdynamic -L/usr/local/lib -Wl,--as-needed -o vim -lgtk-3 -lgdk-3 -lz -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lselinux -lcanberra -lsodium -lacl -lattr -lgpm -L/opt/python3.10/lib/python3.10/config-3.10-x86_64-linux-gnu -lpython3.10 -lcrypt -ldl -lm -lm 
➜  vim git:(main) ✗ 

  1. 将产生的可执行文件替换到系统中

sudo cp /usr/local/bin/vim /usr/bin/vim
  1. 验证系统的vim是否可使用python扩展

vim --version | grep python

可以看到类似的输出:

➜  vim git:(main) ✗ vim --version | grep python
+cmdline_hist      +langmap           -python            +viminfo
+cmdline_info      +libcall           +python3           +virtualedit
链接方式: gcc -rdynamic -L/usr/local/lib -Wl,--as-needed -o vim -lgtk-3 -lgdk-3 -lz -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lselinux -lcanberra -lsodium -lacl -lattr -lgpm -L/opt/python3.10/lib/python3.10/config-3.10-x86_64-linux-gnu -lpython3.10 -lcrypt -ldl -lm -lm 

修复ycmd报错:

The ycmd server SHUT DOWN (restart with ':YcmRestartServer'). YCM core library not detected; you need to compile YCM bef
ore using it. Follow the instructions in the documentation. 

  1. 进入ycmd安装目录

cd ~/.vim/plugged/YouCompleteMe/third_party/ycmd

  1. 使用我们构建的python3.10来进行初始化

/opt/python3.10/bin/python3 build.py

实在不行还可以尝试重新安装YouCompleteMe插件:

  1. 删除原有

sudo rm -rf ~/.vim/plugged/YouCompleteMe
  1. 克隆

git clone https://github.com/ycm-core/YouCompleteMe.git ~/.vim/plugged/YouCompleteMe
  1. 执行如下命令检查依赖

cd ~/.vim/plugged/YouCompleteMe && git submodule update --init --recursive
  1. 编译并安装

/opt/python3.10/bin/python3 install.py --all


# 或者使用下面的命令,能够查看编译输出:
/opt/python3.10/bin/python3 /home/qcqcqc/.vim/plugged/YouCompleteMe/third_party/ycmd/build.py --all --verbose