本文带你从零配置 Neovim,在 Ubuntu 环境下打造一套媲美 VS Code 的高效开发环境,并结合真实项目(多文件夹结构)实战演练,让你一用就上手,一配就爱上!
Github:github.com/neovim/neov...
官网:neovim.io/

在 Linux 世界里,编辑器有两大流派:Emacs 与 Vim。
而 Neovim,作为 Vim 的现代化重生,不仅继承了 Vim 的高效哲学,还拥抱了插件生态与可扩展性,让开发体验直追 VS Code,具有诸多革命性改进:
- 异步架构:插件运行不卡主线程,大文件编辑流畅\
- 内置 LSP 支持:开箱即用的代码补全、跳转、错误诊断\
- Lua 配置:比 Vimscript 更易读、更强大\
- 浮动窗口、终端集成:多任务并行无压力\
- 活跃的插件生态:模糊搜索、Git 集成、AI 辅助编码应有尽有
GitHub 斩获 91k+ Stars,被无数开发者誉为「终极编辑器」!
今天,我们就从 Ubuntu 环境 出发,带你一步步完成 Neovim 的安装、配置,并用一个真实的多文件夹项目做实战演示。
安装 Neovim(Ubuntu 环境)
APT 源的版本较低,可以在 Github 上下载 AppImage 后进行安装:
bash
wget https://github.com/neovim/neovim/releases/download/v0.11.3/nvim-linux-x86_64.appimage
chmod u+x nvim-linux-x86_64.appimage
sudo mv nvim-linux-x86_64.appimage /usr/bin/nvim
验证安装:
bash
nvim --version
能够输出如下所示的版本信息,说明安装没问题了:
txt
NVIM v0.11.3
Build type: Release
LuaJIT 2.1.1741730670
Run "nvim -V1 -v" for more info
Neovim 的基本使用
- 打开文件
bash
nvim filename
- 插入模式
按i
进入插入模式,Esc
退出到普通模式。 - 保存与退出
- 保存:
:w
- 退出:
:q
- 保存并退出:
:wq
- 移动
- 左下上右:
h j k l
- 按数字跳:
10j
向下 10 行
打造现代化 Neovim
我们用 Lazy.nvim 作为插件管理器,让 Neovim 变得更智能。
1. 创建配置目录
bash
mkdir -p ~/.config/nvim
2. 安装 Lazy.nvim
bash
git clone https://github.com/folke/lazy.nvim.git ~/.local/share/nvim/lazy/lazy.nvim
3. 配置入口文件(~/.config/nvim/init.lua
)
lua
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", -- latest stable release
lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
-- 加载 Lazy.nvim
require("lazy").setup({
-- 文件树
{
"nvim-tree/nvim-tree.lua",
dependencies = { "nvim-tree/nvim-web-devicons" }
},
-- 模糊搜索
{
"nvim-telescope/telescope.nvim",
dependencies = { "nvim-lua/plenary.nvim" }
},
-- LSP 语言服务
{
"neovim/nvim-lspconfig"
},
-- 语法高亮
{
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate"
}
})
-- nvim-tree 初始化配置
require("nvim-tree").setup({
sort_by = "case_sensitive",
view = {
width = 30,
},
renderer = {
group_empty = true,
},
filters = {
dotfiles = false,
},
})
保存并运行 Neovim:
bash
nvim

第一次会自动安装插件,等待插件安装完成即可。
项目实战:多文件夹项目导航
假设我们有一个项目结构:
txt
my-project/
├── backend/
│ ├── main.go
│ └── utils/
│ └── helper.go
├── frontend/
│ ├── index.html
│ └── src/
│ └── app.js
└── README.md
1. 打开项目根目录
bash
nvim my-project
2. 启动文件树(nvim-tree)
在 Neovim 中输入:
bash
:lua require("nvim-tree.api").tree.toggle()
你就能快速在多文件夹间切换。

3. 多窗口编辑
- 水平分屏:
:sp file
- 垂直分屏:
:vsp file
- 在不同文件夹下快速对比代码毫无压力。

LSP 加持:代码提示与跳转
安装 LSP 支持,比如 Go 语言:
bash
# 安装依赖
go install golang.org/x/tools/gopls@latest
# 配置GOPATH到环境变量中,已配置的可忽略
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.bashrc
在 init.lua
中添加:
lua
require("lazy").setup({
-- 再上面的依赖后面新增如下配置
-- 代码补全引擎
{
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-nvim-lsp", -- LSP 补全源
"L3MON4D3/LuaSnip", -- 代码片段引擎
},
},
})
-- nvim-lspconfig 初始化配置
require("lspconfig").gopls.setup({
settings = {
gopls = {
analyses = {
unusedparams = true,
},
staticcheck = true,
},
},
on_attach = function(client, bufnr)
-- 绑定 LSP 快捷键(如跳转定义、悬停提示)
vim.keymap.set("n", "gd", vim.lsp.buf.definition, { buffer = bufnr, desc = "Go to Definition" })
vim.keymap.set("n", "K", vim.lsp.buf.hover, { buffer = bufnr, desc = "Hover Documentation" })
end,
})
-- 设置 nvim-cmp
local cmp = require("cmp")
cmp.setup({
snippet = {
expand = function(args)
require("luasnip").lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-Space>"] = cmp.mapping.complete(), -- 手动触发补全
["<CR>"] = cmp.mapping.confirm({ select = true }), -- 回车确认补全
}),
sources = cmp.config.sources({
{ name = "nvim_lsp" }, -- 启用 LSP 补全
}),
})
现在你就能在多文件夹项目中享受智能补全、跳转定义、悬停提示等高级功能。

进阶技巧
- 项目切换 :用
telescope-project
插件管理多个项目。 - Git 集成 :
tpope/vim-fugitive
让你在 Neovim 里完成 Git 操作。 - 终端内嵌 :用
:terminal
在 Neovim 内直接运行编译命令。
结语
Neovim 的魅力,不只是"编辑器",而是一个高度可定制的开发工作站 。
从今天起,让你的 Ubuntu + Neovim 组合,成为写代码的利器。
只要多用、多练、多配,你就能真正从入门到精通!