最近想把自己外网环境中已经配置好的 Neovim + LazyVim 迁移到内网环境。由于内网不能访问外网,所以不能直接在内网执行git clone、:Lazy sync、:MasonInstall、:TSUpdate这类命令,否则会因为无法下载插件和工具而失败。
本次环境大致如下:
系统:Red Hat 8.10 glibc:2.28 终端:ETC Linux 图形终端 目标:离线安装 Neovim,并迁移 LazyVim 配置整体思路是:不要在内网源码编译,也不要在内网在线安装插件,而是在外网准备好 Neovim 本体、LazyVim 配置、插件目录、Mason 工具和字体,然后整体拷贝到内网使用。
1. 安装 Neovim 本体
一开始考虑过在内网直接源码编译 Neovim,但很快发现不太现实。源码编译会依赖很多工具和库,例如gcc、cmake、ninja、gettext、libuv、luajit、tree-sitter等。对于不能访问外网的内网环境来说,处理这些依赖会比较麻烦。
所以更推荐使用已经编译好的 release 包。我最后使用的是:
https://github.com/neovim/neovim-releases下载对应的 AppImage 或兼容旧 glibc 的版本后,拷贝到内网机器。例如:
mkdir-p~/tools/nvimmvnvim-linux-x86_64.appimage ~/tools/nvim/nvimchmod+x ~/tools/nvim/nvim然后把它加入PATH:
echo'export PATH=$HOME/tools/nvim:$PATH'>>~/.bashrcsource~/.bashrc检查是否成功:
nvim--version如果能正常输出版本号,说明 Neovim 本体已经安装成功。
这里需要注意,AppImage 并不会默认安装到系统目录。它更像一个便携式可执行文件,放在哪里就在哪里运行。因此放到~/tools/nvim/这种用户目录下即可,不需要 root 权限。
2. glibc 版本问题
安装过程中遇到过下面的错误:
nvim: /lib64/libc.so.6: version`GLIBC_2.33' not found nvim: /lib64/libc.so.6: version`GLIBC_2.34' not found nvim: /lib64/libc.so.6: version `GLIBC_2.29'not found查看系统版本:
cat/etc/os-release ldd--version发现内网环境是 Red Hat 8.10,glibc 版本是 2.28。这个错误的原因是下载的 nvim 二进制是在更新的系统上编译的,所以需要更高版本的 glibc。
这里不要尝试升级系统 glibc,也不要替换/lib64/libc.so.6。glibc 是 Linux 系统非常核心的库,很多基础命令都依赖它,强行替换有可能导致系统不可用。
正确做法是换一个兼容旧 glibc 的 nvim 包,比如 AppImage、older-glibc build,或者在 Red Hat 8 / Rocky Linux 8 / AlmaLinux 8 环境中自己编译。我的情况是换用neovim-releases里的版本后解决。
3. 迁移 LazyVim 环境
Neovim 本体能运行之后,再迁移 LazyVim 配置。
在外网机器上,先确保 LazyVim 已经安装完成,插件、Mason 工具也都已经下载好。然后打包下面几个目录:
tarczf nvim-env.tar.gz\-C~\.config/nvim\.local/share/nvim\.local/state/nvim\.cache/nvim这些目录分别对应:
~/.config/nvim Neovim 配置 ~/.local/share/nvim Lazy 插件、Mason 工具等 ~/.local/state/nvim 状态文件 ~/.cache/nvim 缓存文件这里建议使用-C ~的方式打包,这样压缩包里的路径会比较干净,例如.config/nvim、.local/share/nvim。如果直接打包~/.config/nvim,可能会看到:
tar: Removing leading`/' from member names tar: Removing leading`/' from hardlinktargets这不是报错,只是tar为了安全去掉绝对路径前面的/。
把压缩包拷贝到内网后,在 home 目录解压:
tarxzf nvim-env.tar.gz-C~然后启动:
nvim内网环境中尽量不要执行:
:Lazy sync :MasonInstall :TSUpdate因为这些命令会尝试联网下载插件、LSP、formatter 或 treesitter parser。
对于 SystemVerilog / RTL 开发,如果使用了 Verible,也要确认 Mason 里的工具是否能运行:
ls~/.local/share/nvim/mason/bin ~/.local/share/nvim/mason/bin/verible-verilog-format--version~/.local/share/nvim/mason/bin/verible-verilog-ls--version如果这些命令能正常输出,说明相关工具也迁移成功了。
4. 解决 LazyVim 图标乱码
LazyVim 启动后,如果发现文件图标、状态栏图标显示成方框或乱码,一般不是 LazyVim 配置问题,而是终端字体不支持 Nerd Font。
LazyVim 中很多图标都依赖 Nerd Font。普通字体即使能显示英文和中文,也不一定包含这些图标字符。
我在 Windows 上原本使用的是 OpenType 字体,Linux 也可以使用这类字体。常见的.ttf、.otf、.ttc字体文件在 Linux 下通常都能识别。将 Nerd Font 字体拷贝到 Linux 后,可以安装到用户字体目录:
mkdir-p~/.local/share/fonts/NerdFontscp*.otf ~/.local/share/fonts/NerdFonts/ fc-cache-fv如果是.ttf文件也是一样:
mkdir-p~/.local/share/fonts/NerdFontscp*.ttf ~/.local/share/fonts/NerdFonts/ fc-cache-fv检查字体是否被识别:
fc-list|grep-iNerd如果能看到字体,说明系统已经识别到了。
不过我这里又遇到一个小问题:fc-list | grep -i Nerd能看到字体,但在 ETC Linux 图形终端的字体设置里找不到这个字体。最后的解决方法是:完全关闭 ETC 图形终端,然后重新打开。重新打开后,字体列表就刷新出来了。
建议优先选择带Mono的 Nerd Font,例如:
JetBrainsMono Nerd Font Mono Hack Nerd Font Mono FiraCode Nerd Font Mono然后在终端设置中切换字体:
Terminal Preferences → Profile / Appearance / Text → Font切换完成后,可以用下面的命令测试:
echo" "如果能显示为正常图标,说明 Nerd Font 已经生效。再次打开 LazyVim,图标乱码问题基本就解决了。
总结
这次内网配置 Neovim + LazyVim,主要踩了几个坑。
首先,内网环境没有网络,不适合源码编译或在线安装插件。最稳的方式是在外网提前准备好 Neovim 本体、LazyVim 插件、Mason 工具,然后整体拷贝到内网。
其次,Red Hat 8.10 的 glibc 是 2.28,如果下载了较新系统编译的 nvim,可能会出现GLIBC_2.33 not found、GLIBC_2.34 not found等错误。这个问题不要通过升级 glibc 解决,而应该换用兼容旧 glibc 的 nvim release 或 AppImage。
最后,LazyVim 图标乱码通常是字体问题。安装 Nerd Font 后,需要刷新字体缓存,并且完全重启图形终端,之后在终端设置中切换到 Nerd Font Mono 字体即可。
整体流程可以概括为:
外网准备 nvim release → 内网安装 nvim 本体 → 外网打包 LazyVim 配置和插件目录 → 内网解压迁移 → 安装 Nerd Font → 重启终端并切换字体这样就可以在内网环境中比较稳定地使用 Neovim + LazyVim。