为什么需要这篇博客
Debian13默认使用Python3.13,由于其Breaking Change(import_module)移除导致vim初始化报错,所以需要手动下载py310的源码包以提供vim编译
以解决YouComplateMe插件的适配问题
步骤
一、 安装Python3.10
下载python3.10的源码包
wget https://www.python.org/ftp/python/3.10.18/Python-3.10.18.tar.xz
解压(我这里使用zsh自带的万能解压命令)
x Python-3.10.18.tar.xz
# 或者
tar -xzf Python-3.10.18.tgz
进入目录并配置编译选项
#这里一定要记得安装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
开始编译Python
make -j$(nproc)
安装(这里千万注意,避免覆盖系统自带的python)
sudo make altinstall # 使用 altinstall 避免覆盖系统 python
创建符号链接
sudo ln -sf /opt/python3.10/bin/python3.10 /opt/python3.10/bin/python3
修复动态链接库
# 创建配置文件
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
验证SSL是否可用(防止后面出现问题)
/opt/python3.10/bin/python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"
二、克隆并编译Vim
克隆仓库
git clone https://github.com/vim/vim
配置编译选项
./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 命令中显示编译者信息
用途:标识自定义编译版本
开始编译并安装
export LDFLAGS="-rdynamic" # 启用动态库支持
sudo make install
检查是否已经启用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) ✗
将产生的可执行文件替换到系统中
sudo cp /usr/local/bin/vim /usr/bin/vim
验证系统的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.
进入ycmd安装目录
cd ~/.vim/plugged/YouCompleteMe/third_party/ycmd
使用我们构建的python3.10来进行初始化
/opt/python3.10/bin/python3 build.py
实在不行还可以尝试重新安装YouCompleteMe插件:
删除原有
sudo rm -rf ~/.vim/plugged/YouCompleteMe
克隆
git clone https://github.com/ycm-core/YouCompleteMe.git ~/.vim/plugged/YouCompleteMe
执行如下命令检查依赖
cd ~/.vim/plugged/YouCompleteMe && git submodule update --init --recursive
编译并安装
/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