释放小七猫的分享欲

LazyVim 让我删掉了以前的 config

tags: 应用程序
@ 03/09/2025

LazyVim 让我删掉了以前的 config

还记得前几年那段疯狂迷恋 Vim/Neovim 的岁月吗?那时候的我就像发现了新大陆一样,对着这两个编辑器废寝忘食,就跟玩游戏一样。

当然,总有一些"理性派"朋友会说:“编辑器不就是个工具嘛,你折腾这些有啥用?“但我想说,这个世界每个人都有自己的小乐趣。你觉得无聊的事情,在别人眼里可能就是快乐源泉。你说他折腾编辑器没意义,难道玩游戏钓鱼就有所谓的“意义”了吗。不过,我也不赞成花费太多时间在配置编辑器上,顺手好用就行了。

进入社畜生活后,折腾编辑器的激情逐渐被工作消磨(现在更多的是在体验各种 AI 编辑器,虽然我写代码的频率也不高)。但是我心里依然对那些 Neovim 的开发者和 Vim 大神们保持着满满的敬意。

最近工作上碰到了一个棘手问题:需要通过好几层 SSH 跳板才能连到目标服务器。这时候 VSCode 的多服务器 SSH 就显得有点力不从心了,那个加载速度简直让人抓狂。于是我想起了我的老朋友 Neovim。

但说实话,现在的我已经没有当年那种从零开始配置的狂热了。幸好,江湖上早就流传着 LazyVim 这个神器,听说它能让 Lazier 也能拥有一套完美的 Neovim 配置。

LazyVim 安装大作战

再见 ~/.config/nvim

官网贴心地建议我们备份旧配置文件,但我看了看自己那几行可怜的配置,心想:算了,直接删了吧,反正也没什么值得留恋的!

rm -rf ~/{.config,.cache}/nvim ~/.local/{share,state}/nvim

Hello LazyVim

在开始之前,记得先解决网络问题,然后开始安装这个传说中的神器:

git clone https://github.com/LazyVim/starter ~/.config/nvim

# 删除 .git 文件夹,无所谓
# 建议留着以对比配置文件
rm -rf ~/.config/nvim/.git

安装自带插件

直接输入 nvim 启动 Neovim,然后就可以坐下来喝杯茶了!LazyVim 的插件系统会像勤劳的小蜜蜂一样,自动帮你安装各种必要的插件。当然,这一步同样需要稳定的网络环境。

开始 LazyVim

配置文件

所有的配置文件都在这个目录里:~/.config/nvim/

❯ tree
.
├── init.lua
├── lazy-lock.json
├── lazyvim.json
├── LICENSE
├── lua
│   ├── config
│   │   ├── autocmds.lua
│   │   ├── keymaps.lua
│   │   ├── lazy.lua
│   │   └── options.lua
│   └── plugins
│       └── example.lua
├── README.md
└── stylua.toml

4 directories, 11 files

init.lua:这是整个配置的入口文件,一般情况下我们不需要碰它。 lua/config/options.lua:这里存放着各种 Vim 的个性化设置,比如换行、缩进这些影响编码体验的细节。

我直接把过去的配置迁移过来就行了……我刚刚是不是删掉了什么?

-- Options are automatically loaded before lazy.nvim startup
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
-- Add any additional options here

---------------------------------------------------------------
-- ~/.config/nvim/init.lua  —— 最小可行且舒服
---------------------------------------------------------------
-- 0. 判断系统 & 默认 shell
local is_win = vim.fn.has("win32") == 1 or vim.fn.has("win64") == 1
if is_win then
  vim.opt.shell = "powershell"
  vim.opt.shellcmdflag = "-NoLogo -NoProfile -ExecutionPolicy RemoteSigned -Command"
end

-- 1. 外观
vim.opt.number = true -- 绝对行号
vim.opt.relativenumber = false -- 绝对行号
vim.opt.showmatch = true -- 括号匹配
vim.opt.matchtime = 5 -- 0.5 s
vim.opt.wrap = true -- 长行自动换行
-- vim.opt.list = true -- 显示空格
-- vim.opt.listchars = { space = "." }

-- 2. 输入体验
vim.g.mapleader = " "
vim.opt.mouse = "a"
vim.opt.clipboard = "unnamedplus" -- 默认系统剪贴板

-- 3. 缩进
vim.opt.tabstop = 4
vim.opt.softtabstop = 4
vim.opt.shiftwidth = 4
vim.opt.expandtab = true -- 用 4 空格而不是tab
vim.opt.smartindent = true -- 智能缩进
vim.opt.autoindent = true

-- 4. 搜索 / 修改
vim.opt.hlsearch = true -- 搜索时高亮显示被找到的文本
vim.opt.incsearch = true -- 输入搜索内容时就显示搜索结果
vim.opt.ignorecase = true -- 搜索时忽略大小写
vim.opt.smartcase = true -- 但在有大写字母时仍保持对大小写敏感

-- 5. 缓冲区、撤销
vim.opt.swapfile = false
vim.opt.backup = false
vim.opt.writebackup = false
vim.opt.history = 100 -- undo 100 次
vim.opt.updatetime = 100 -- 提升 LSP/gitsigns 响应

lua/config 目录:这里还可以定义各种快捷键和自动命令。如果你不是重度自定义用户,只需要调整 options.lua 就够了。不过我建议你还是打开其他文件看看,了解一下 LazyVim 是如何设计快捷键的。

插件

所有的插件配置都放在 lua/plugins 目录下,里面已经有一个 example.lua 示例文件。

以 twilight.nvim 插件为例,看看如何优雅地添加一个新插件。在 lua/plugins 中创建 twilight.lua 文件,然后添加这些内容:

-- 一定要加 return ,否则插件无法加载
return {
  "folke/twilight.nvim",
  opts = {
    -- your configuration comes here
    -- or leave it empty to use the default settings
    -- refer to the configuration section below
  }
}

保存文件后,重新打开 Neovim,或者使用 :Lazy sync 命令,LazyVim 就会像魔法师一样自动帮你安装好新插件。

LSP 语言服务器

LazyVim 内置了 Mason LSP 管理器,你不用为配置各种语言服务器而头疼了。

:Mason:图形界面 :MasonInstall XXX:命令安装指定插件

常用的就这两个命令。使用前记得确保网络通畅。

Lua 环境配置

在 Mason 界面中,可以用 Ctrl+F 搜索你想要的语言服务器,找到后按 i 键就能安装:

也可以通过命令行直接安装

:MasonInstall lua-language-server

Python 环境

:MasonInstall pyright

现在很多小伙伴都爱用 uv 包管理器,俺也一样。在用 Neovim 写 Python 代码之前,需要先激活你的虚拟环境, source .venv/bin/activate,这样 LSP 才能准确地理解你的项目依赖。

C/C++ 环境

说到 C/C++ 的语言服务器,除了 clangd,其他的我看都不会看一眼,so:

:MasonInstall clangd

当然也可以搜索安装,安装之后,效果如下:

顺带啰嗦一句,如果你的项目使用 CMake,记得在配置时加上 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 参数,这样才会生成 compile_commands.json 文件,clangd 才能完美理解你的项目结构。

收官

经过这番折腾,我的 LazyVim 配置基本就完成了。整个过程并没有想象中那么复杂,改动适中,工作量大概相当于在 VSCode 里安装几个 LSP 插件的水平。

最让我满意的是,当面对那些需要多层 SSH 跳转的服务器环境时,Vim/Neovim 的速度优势就完全显现出来了。

所以,如果你也是一个 Neovim 爱好者,或者正在为多服务器开发环境而烦恼,不妨试试 LazyVim。它能让你在最短的时间内拥有一个功能完整、颜值在线的编辑器环境。