用了好几年 Vim,去年开始切到 Neovim,体验好了不少。把配置思路记下来,省得下次重装又要从头找。
为什么换 Neovim
- 原生 Lua 配置,比 Vimscript 好写好读
- 内置 LSP 支持,不需要装 coc.nvim 之类的大插件
- 异步渲染,不卡
- 社区活跃,插件生态比 Vim 好很多
配置目录结构
Neovim 的配置放在 ~/.config/nvim/,我用的结构:
~/.config/nvim/
├── init.lua # 入口文件
└── lua/
├── core/
│ ├── options.lua # 基础选项
│ ├── keymaps.lua # 快捷键
│ └── autocmds.lua # 自动命令
└── plugins/
├── init.lua # 插件列表(lazy.nvim)
├── lsp.lua # LSP 配置
├── treesitter.lua # 语法高亮
└── ...
包管理器:lazy.nvim
目前最好用的 Neovim 插件管理器,支持懒加载,启动速度快。
init.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", lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup("plugins")
基础选项
-- lua/core/options.lua
local opt = vim.opt
opt.number = true -- 显示行号
opt.relativenumber = true -- 相对行号
opt.tabstop = 4
opt.shiftwidth = 4
opt.expandtab = true
opt.smartindent = true
opt.wrap = false -- 不折行
opt.cursorline = true -- 高亮当前行
opt.termguicolors = true -- 真彩色
opt.signcolumn = "yes" -- 始终显示符号列,避免跳动
opt.scrolloff = 8 -- 光标距顶/底保持 8 行
opt.clipboard = "unnamedplus" -- 与系统剪贴板共享
常用插件
| 插件 | 用途 |
|---|---|
nvim-treesitter | 语法高亮和代码结构解析 |
nvim-lspconfig | LSP 配置框架 |
nvim-cmp | 自动补全 |
telescope.nvim | 模糊搜索文件/内容 |
neo-tree.nvim | 文件树 |
gitsigns.nvim | Git 行内标记 |
lualine.nvim | 状态栏 |
tokyonight.nvim | 配色方案 |
LSP 配置
先装语言服务器,以 Python 为例:
# 用 Mason 统一管理 LSP 服务器
:MasonInstall pyright
配置:
local lspconfig = require("lspconfig")
lspconfig.pyright.setup({
on_attach = function(client, bufnr)
-- 快捷键绑定
local opts = { buffer = bufnr }
vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts)
vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts)
end
})
我的 Leader 键映射
vim.g.mapleader = " " -- 空格作为 leader
-- 文件搜索
vim.keymap.set("n", "<leader>ff", "<cmd>Telescope find_files<cr>")
-- 内容搜索
vim.keymap.set("n", "<leader>fg", "<cmd>Telescope live_grep<cr>")
-- 文件树
vim.keymap.set("n", "<leader>e", "<cmd>Neotree toggle<cr>")
-- 保存
vim.keymap.set("n", "<leader>w", "<cmd>w<cr>")
-- 关闭 buffer
vim.keymap.set("n", "<leader>q", "<cmd>bd<cr>")
整体折腾下来大概花了两三天,配置文件放在 GitHub 上了,换机器直接 clone 下来就能用。