前言
对于使用 Ubuntu 用户来说,通过编译方式安装最新稳定版 Neovim,能尽可能地获取最新功能特性。
本文将详细演示从依赖准备到编译安装的完整流程,帮助用户在不同 Ubuntu 版本中顺利部署这一强大的文本编辑器。并将结合 Bash Shell 自动化脚本进行各步骤的错误提示,以提供安装过程的调试。
- 本文不用修改任何一个步骤同时兼容 Ubuntu 24.04, 22.04 和 20.04 LTS。
- 本文所用的脚本是 Bash Shell,如果您用的 Shell 是 zsh 或 fish,那么需要进入 Bash Shell 环境中运行这些脚本。
- 在命令行终端运行
bash
命令进入 Bash Shell,退出时运行exit
。
Neovim VS Vim
特性 | Vim | Neovim |
---|---|---|
可扩展性 | 基于 Vimscript | 内置异步架构,支持 Lua 插件 |
内置 LSP 支持 | 需手动配置插件 | 原生内置语言服务器协议(LSP)支持 |
UI 与终端分离 | 无 | 支持 GUI 客户端与异步渲染 |
社区与生态 | 历史悠久,插件丰富 | 现代化开发,更易维护 |
性能优化 | 单线程执行 | 异步执行,提高性能与响应速度 |
步骤一、 安装编译依赖工具
通过 apt
包管理器安装必要的开发工具和依赖项。脚本中包含循环机制,确保依赖安装失败时自动重试:
cat>/tmp/installer.sh<<EOF
echo '+++++++++++++++++安装依赖:'
sudo apt update
sudo apt-get install -y git ninja-build gettext cmake curl build-essential
code=\$?
TOTAL_CNT=5
while [ \$code -gt 0 ]; do
if [ \$TOTAL_CNT -eq 0 ]; then
break
fi
sudo apt-get install -y git ninja-build gettext cmake curl build-essential
code=\$?
sleep 1
TOTAL_CNT=\$((\$TOTAL_CNT - 1))
done
if [ \$code -eq 0 ]; then
echo '+++++++++++++++++成功安装依赖项软件包!'
else
echo '+++++++++++++++++安装依赖项软件包失败!'
exit
fi
EOF
bash /tmp/installer.sh
依赖项包括代码版本管理工具 git
、构建工具 ninja-build
和 cmake
、编译环境 build-essential
等,这些都是编译开源项目的基础组件。
步骤二、克隆代码仓库
为应对网络波动,脚本提供了官方 GitHub 仓库和镜像加速两种克隆方式(详情请参阅站内文章《GitHub国内访问慢?5种加速方案解决克隆失败,提升下载速度》)。
由于 GitHub 仓库的拉取在国内的速度时好时坏,除非您有网络代理,否则请老实使用镜像加速。
故,本文在克隆代码仓库时优先使用加速域名的方式:
用此方式可能有个不太严重的后果:可能加速服务器会缓存仓库内容,或许获取的 Stable 版本会旧一点点,但在合理范围内。
设立一个全局变量,用于存放加速域名:
export GHPROXY_DOAMIN=https://ghfast.top
2.1、 测试镜像是否有效
运行以下命令,如果无法正常下载,那么上文的加速域名很有可能已经失效:
cat>/tmp/installer.sh<<EOF
cd /tmp
wget -O test-README.md \$GHPROXY_DOAMIN/https://github.com/neovim/neovim/blob/master/README.md
EOF
bash /tmp/installer.sh
2.2、 加速域名无效时做的应对措施
若是加速域名失效,可根据上文的《解决 GitHub 国内访问慢,五种解决方案》来获得最新有用的加速域名,然后将获取到的加速域名替换原来的(替换上文 GHPROXY_DOAMIN
变量的值)。
2.3、 通过 Github 镜像克隆代码仓库
# 如果 3 失效,请依次尝试 2 和 1
# 如果使用了网络代理,可选择 1
export USING=3
cat>/tmp/installer.sh<<EOF
echo '+++++++++++++++++1. 进入临时工作目录:'
cd /tmp
echo '+++++++++++++++++2. 克隆 Github 代码仓库:'
## USING=3
if [ \$USING -eq 1 ]; then
# 1.
GITHUB_URL=https://github.com/neovim/neovim.git
elif [ \$USING -eq 2 ]; then
# 2.
GITHUB_URL=https://gitclone.com/github.com/neovim/neovim.git
elif [ \$USING -eq 3 ]; then
# 3.
GITHUB_URL=\$GHPROXY_DOAMIN/https://github.com/neovim/neovim.git
else
GITHUB_URL=\$GHPROXY_DOAMIN/https://github.com/neovim/neovim.git
fi
git clone "\$GITHUB_URL"
code=\$?
TOTAL_CNT=5
while [ \$code -gt 0 ]; do
if [ \$TOTAL_CNT -eq 0 ]; then
break
fi
git clone "\$GITHUB_URL"
code=\$?
sleep 1
TOTAL_CNT=\$((\$TOTAL_CNT - 1))
done
if [ \$code -eq 0 ]; then
echo '+++++++++++++++++成功克隆代码仓库!'
else
echo '+++++++++++++++++代码仓库克隆失败!'
exit
fi
EOF
bash /tmp/installer.sh
若克隆失败请换一种方式,重复上述脚本的运行。
步骤三、切换到稳定版分支
默认切换到 stable
分支以获取最新稳定版,如需特定版本(如 release-0.11
),可取消注释对应代码:
cat>/tmp/installer.sh<<EOF
cd /tmp/neovim
echo '+++++++++++++++++切换 Git 分支:'
# git checkout release-0.11
git checkout stable
if [ \$? -eq 0 ]; then
echo '+++++++++++++++++成功切换 Git 分支!'
else
echo '+++++++++++++++++切换 Git 分支失败!'
exit
fi
EOF
bash /tmp/installer.sh
分支切换成功后会提示状态,失败则自动终止脚本以避免后续错误。
步骤四、使用 Github 镜像加速域名来加速依赖的下载
在编译之前要说明的是,编译时可能要从 GitHub 下载一些文件,此时涉及网络是否通畅的问题,若因网络问题下载失败,将会导致编译失败;于是这里可能需要设置命令行终端的网络代理,让编译过程中的网络流量通过(境外)代理服务器转发。
除了使用网络代理的方式来下载编译依赖,还可以使用镜像加速域名:
cat>/tmp/installer.sh<<EOF
cd /tmp/neovim
find . -type f -print0 | xargs -0 sed -i "s@https://github.com@\$GHPROXY_DOAMIN/https://github.com@g"
EOF
bash /tmp/installer.sh
上面的命令成功执行之后,所有的编译依赖都通过加速服务器来下载依赖项。因此,为解决网络问题而生的“ 步骤五”在此时变得可有可无,而可以直接执行“ 步骤六”。
步骤五、下载和编译依赖
默认情况下(USE_BUNDLED=1),编译程序会下载并静态地链接其所需的依赖项。
这一步不是必须,或许您可以直接跳过这一步骤,直接执行 步骤六
。
为了保证依赖的正确获取,请尽量执行此步骤。
如果不使用网络代理,多次尝试可能是一种很好的解决方案。
若下载依赖时出现各种错误,请勿担忧,耐心等待,脚本将会自动重新进行依赖包的下载!
cat>/tmp/installer.sh<<EOF
cd /tmp/neovim
echo '+++++++++++++++++编译依赖项:'
make deps CMAKE_BUILD_TYPE=RelWithDebInfo
code=\$?
TOTAL_CNT=20
while [ \$code -gt 0 ]; do
if [ \$TOTAL_CNT -eq 0 ]; then
break
fi
echo '+++++++++++++++++编译依赖项失败,重新开始!还有 ' \$TOTAL_CNT ' 次尝试的机会!'
sleep 5
make distclean
make deps CMAKE_BUILD_TYPE=RelWithDebInfo
code=\$?
TOTAL_CNT=\$((\$TOTAL_CNT - 1))
done
if [ \$code -eq 0 ]; then
echo '+++++++++++++++++依赖项编译成功!'
else
echo '+++++++++++++++++依赖项编译失败!'
exit
fi
EOF
bash /tmp/installer.sh
步骤六、Ubuntu 编译 Neovim
make 的 CMAKE_BUILD_TYPE
参数决定了所使用的编译器优化和调试信息的级别,它有以下三个可能值:
Release
:完整的编译器优化,没有调试信息。这种构建类型目的是获取最佳性能。通常由软件包维护者使用。Debug
:完整的调试信息,几乎不进行优化。用于开发者使用 GDB 等调试工具获取有意义的输出。这也是默认的值。RelWithDebInfo
(“Release With Debug Info”):启用了很多优化,以及在 Neovim 崩溃时展现足够的调试信息,此时你仍可进行追踪溯源。一般选取这个为CMAKE_BUILD_TYPE
的值。
使用 CMake 生成编译配置,指定安装路径为 /usr/local/neovim-stable
,并采用 RelWithDebInfo 模式优化性能(更多的构建资料请参考《资料:Neovim 编译选项及依赖安装文档》):
cat>/tmp/installer.sh<<EOF
cd /tmp/neovim
echo '+++++++++++++++++开始进行编译操作:'
make CMAKE_BUILD_TYPE=RelWithDebInfo CMAKE_INSTALL_PREFIX=/usr/local/neovim-stable
if [ \$? -eq 0 ]; then
echo '+++++++++++++++++编译成功!'
else
echo '+++++++++++++++++编译失败!'
exit
fi
EOF
bash /tmp/installer.sh
步骤七、执行安装操作
编译完成后,通过 sudo make install
将程序安装到系统路径:
cat>/tmp/installer.sh<<EOF
if [ -d /usr/local/neovim-stable ]; then
echo '+++++++++++++++++删除旧版本安装目录:'
sleep 5
sudo rm -rf /usr/local/neovim-stable
fi
cd /tmp/neovim
echo '+++++++++++++++++执行安装操作:'
sudo make install
if [ \$? -eq 0 ]; then
echo '+++++++++++++++++安装成功!'
else
echo '+++++++++++++++++安装失败!'
exit
fi
EOF
bash /tmp/installer.sh
步骤八、系统配置与残余文件清理
本章节也是本文的最后一个主要部分,完成以下几方面的工作:
- 添加刚刚安装的二进制目录到系统环境变量中;
- 修改桌面启动器的程序图标和完整的命令执行路径;
- 清理编译安装过程留下的文件和目录;
- 验证安装的成败。
8.1、添加环境变量
将可执行文件路径写入用户环境变量配置文件,确保全局调用:
cat>/tmp/installer.sh<<EOF
echo '+++++++++++++++++将新安装的可执行文件目录添加进系统的环境变量中:'
if [ -d /usr/local/neovim-stable/bin ]; then
echo \$SHELL | grep -i bash
if [ \$? -eq 0 ]; then
echo ''>>~/.bashrc
echo 'export PATH="\${PATH}:/usr/local/neovim-stable/bin"' >>~/.bashrc
fi
echo \$SHELL | grep -i fish
# 如果默认 Shell 为 Fish,那么须执行以下的命令:
if [ \$? -eq 0 ]; then
echo ''>>~/.config/fish/config.fish
echo 'set PATH \$PATH "/usr/local/neovim-stable/bin"' >>~/.config/fish/config.fish
fi
fi
EOF
bash /tmp/installer.sh
8.2、桌面环境适配
修改桌面启动器配置,确保图标和执行路径正确,并复制到系统应用目录,方便图形界面调用:
cat>/tmp/installer.sh<<EOF
echo '+++++++++++++++++更改启动路径和图标:'
if [ -d /usr/local/neovim-stable/share/applications ]; then
sudo sed -i 's@TryExec=nvim@TryExec=/usr/local/neovim-stable/bin/nvim@g' /usr/local/neovim-stable/share/applications/nvim.desktop
sudo sed -i 's@Exec=nvim@Exec=/usr/local/neovim-stable/bin/nvim@g' /usr/local/neovim-stable/share/applications/nvim.desktop
sudo sed -i 's@Icon=nvim@Icon=/usr/local/neovim-stable/share/icons/hicolor/128x128/apps/nvim.png@g' /usr/local/neovim-stable/share/applications/nvim.desktop
sudo cp /usr/local/neovim-stable/share/applications/nvim.desktop /usr/share/applications/
fi
EOF
bash /tmp/installer.sh
8.3、清理临时文件
安装完成后删除临时目录,释放磁盘空间:
cat>/tmp/installer.sh<<EOF
echo '+++++++++++++++++删除源代码目录!'
sudo rm -rfv /tmp/neovim
EOF
bash /tmp/installer.sh
rm -fv /tmp/installer.sh
8.4、验证是否安装成功
- 有图形界面的系统,在启动器或者软件列表中搜索“neovim”是否会出现相应的图标,点击图标是否会正常启动程序;
- 另起一个命令行终端,运行
nvim
命令,看看是否启动文本编辑器; - 或者另开终端,执行命令
nvim --version
即可验证。 - 如果遇到没有图形界面的系统,需要退出(/注销)当前用户,再登录系统才会使环境变量生效。
总结
通过以上步骤,用户可在 Ubuntu 24.04、22.04 和 20.04 中完成最新稳定版 Neovim 的编译安装,整个流程涵盖依赖管理、代码获取、编译配置与执行安装的过程、环境变量的设置,以及桌面启动器的相关配置。
Neovim 相较于 Vim,在可扩展性、异步执行与内置 LSP 支持等方面具有显著优势,适合现代开发者使用。祝您使用愉快!
鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。
本文章可以转载,但是需要说明来源出处!
本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com