Ubuntu 24.04 环境的 Neovim 源码编译与格式化全家桶部署教程

在 Ubuntu 24.04 上源码编译 Neovim 稳定版,并部署 vim-plug、文件树、主题、OSC 52 远程复制和 Conform 格式化配置。

本文记录在 Ubuntu 24.04 环境中,从源码编译安装 Neovim 稳定版,并部署一套实用的编辑器全家桶配置。

这套配置包含基础显示、文件树、OneDark 主题、OSC 52 远程复制,以及基于 conform.nvimprettier 的代码格式化。适合新服务器、新桌面环境,或者需要统一 Neovim 使用体验的场景。

第一步:安装依赖并源码编译 Neovim

在全新 Ubuntu 24.04 系统中,先安装编译 Neovim 所需的基础工具和系统依赖。

sudo apt update
sudo apt install ninja-build gettext cmake unzip curl build-essential git -y

拉取 Neovim 源码,并切换到稳定版分支。使用 stable 分支可以规避开发版中可能出现的临时问题。

git clone https://github.com/neovim/neovim.git ~/neovim-src
cd ~/neovim-src
git checkout stable

开始编译并全局安装:

make CMAKE_BUILD_TYPE=Release -j$(nproc)
sudo make install

清理 shell 路径缓存,并验证 Neovim 版本:

hash -r
nvim -v

如果系统里原本安装过旧版 Neovim,可以额外确认实际调用路径:

which nvim
nvim --version

第二步:安装格式化所需环境

conform.nvim 本身负责调度格式化,但真正执行排版的是系统中的外部工具。这里安装 Node.js、npm 和全局 Prettier。

sudo apt install nodejs npm -y
sudo npm install -g prettier

安装完成后验证:

node -v
npm -v
prettier -v

第三步:安装 vim-plug 并写入完整配置

先安装 vim-plug 插件管理器:

curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
  https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

创建 Neovim 配置目录。如果已经存在旧配置,建议先手动备份后再继续。

mkdir -p ~/.config/nvim

写入完整 init.vim 配置:

cat << 'EOF' > ~/.config/nvim/init.vim
" =================================================
" 1. 基础显示设置
" =================================================
set nocompatible
syntax on
filetype plugin indent on
set encoding=utf-8
set mouse=a

set number
set relativenumber
set cursorline

if has("termguicolors")
  set termguicolors
endif

" =================================================
" 2. 插件管理
" =================================================
call plug#begin('~/.local/share/nvim/plugged')
Plug 'preservim/nerdtree'
Plug 'joshdick/onedark.vim'
Plug 'ojroques/vim-oscyank'
Plug 'stevearc/conform.nvim'
call plug#end()

" =================================================
" 3. 视觉与颜色修复
" =================================================
silent! colorscheme onedark

function! s:fix_visual_style()
  highlight Normal guibg=#1e2127 guifg=#abb2bf
  highlight NonText guibg=#1e2127 guifg=#3b4048
  highlight LineNr guifg=#4b5263 guibg=NONE
  highlight CursorLineNr cterm=bold gui=bold guifg=#e5c07b guibg=NONE
  highlight Visual guibg=#3e4452 guifg=NONE
  highlight CursorLine guibg=#2c313a ctermbg=236
  highlight Search guibg=#61afef guifg=#1e2127
  highlight IncSearch guibg=#98c379 guifg=#1e2127
  highlight VertSplit guifg=#3e4451 guibg=NONE
endfunction

augroup MyColors
  autocmd!
  autocmd ColorScheme * call s:fix_visual_style()
  autocmd BufEnter,WinEnter * call s:fix_visual_style()
augroup END

call s:fix_visual_style()

" =================================================
" 4. 远程复制逻辑
" =================================================
autocmd TextYankPost * if v:event.operator is 'y' && v:event.regname is '' | execute 'OSCYankRegister "' | endif

" =================================================
" 5. 快捷键设置
" =================================================
let mapleader=";"
nmap <leader>w :w<CR>
nmap <leader>q :q<CR>
nmap <leader>fl :NERDTreeToggle<CR>
nnoremap <CR> :noh<CR><CR>

" =================================================
" 6. 代码格式化配置
" =================================================
lua << LUA_EOF
local status_ok, conform = pcall(require, "conform")
if not status_ok then
  return
end

conform.setup({
  formatters_by_ft = {
    json = { "prettier" },
    yaml = { "prettier" },
    html = { "prettier" },
    css = { "prettier" },
    javascript = { "prettier" },
    typescript = { "prettier" },
    markdown = { "prettier" },
  },
  format_on_save = {
    timeout_ms = 1000,
    lsp_format = "fallback",
  },
})

vim.keymap.set({ "n", "v" }, "<leader>f", function()
  conform.format({
    timeout_ms = 1000,
    lsp_format = "fallback",
  })
end, { desc = "Format file or range" })
LUA_EOF
EOF

第四步:初始化插件

在终端输入以下命令打开 Neovim:

nvim

首次进入后执行:

:PlugInstall

等待左侧窗口提示安装完成,所有插件显示 OK 后,执行:

:qa!

然后重新打开 Neovim,让插件配置完整加载。

第五步:验证格式化功能

创建一个 JSON 文件测试:

nvim test.json

写入一段未格式化的内容:

{"name":"ubuntu","version":"24.04","editor":"neovim"}

在普通模式下输入:

;f

如果配置正常,JSON 会被 Prettier 自动格式化。也可以直接保存:

;w

保存时 conform.nvim 会自动触发格式化。

检查格式化工具状态:

:ConformInfo

这个命令会弹出状态面板,显示当前文件匹配到的格式化工具,例如 prettier,以及该工具在 Ubuntu 系统中是否可用。

常用快捷键

  • ;w:保存当前文件
  • ;q:退出当前窗口
  • ;fl:打开或关闭文件树
  • ;f:格式化当前文件或选中范围
  • Enter:清除搜索高亮

排错建议

如果 :PlugInstall 下载失败,通常是网络无法访问 GitHub。确认网络后重新执行 :PlugInstall

如果 :ConformInfo 显示 prettier 不可用,先检查命令是否存在:

which prettier
prettier -v

如果 nvim 仍然调用旧版本,检查路径优先级:

which -a nvim
hash -r

源码安装默认会把 Neovim 放到 /usr/local/bin/nvim,通常应优先于系统仓库中的 /usr/bin/nvim