要把 Neovim 配置为缩进 4 空格,并适用于所有语言(或某些语言如 C/C++),你只需要设置这三个核心选项即可:
✅ 通用方式:在 init.lua
或 options.lua
中添加
vim.opt.tabstop = 4 -- 一个 <Tab> 等于 4 个空格
vim.opt.shiftwidth = 4 -- 缩进级别(按 >> 或 << 时移动的空格数)
vim.opt.softtabstop = 4 -- 输入 <Tab> 时的空格数
vim.opt.expandtab = true -- 用空格代替 tab 字符
这将让:
- 手动输入 Tab 变成 4 空格;
- 自动缩进使用 4 空格;
- Visual 模式 >>、<< 操作都是 4 空格;
- 插件识别为“你希望使用 4 空格缩进”。
🧠 这 4 个设置的区别(深入理解)
设置项 | 作用 |
---|---|
tabstop |
控制文件中 一个 tab 显示为多少空格宽度 |
shiftwidth |
控制自动缩进、缩进操作时用几个空格 |
softtabstop |
控制你按下 tab 键时输入的空格数量 |
expandtab |
是否将 tab 实际转换为空格写入文件 |
配合
expandtab = true
,这会将 tab 实际转成空格保存。
📁 文件建议存放位置(LazyVim 用户)
1️⃣ 全局适用:
-- ~/.config/nvim/lua/config/options.lua
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
vim.opt.expandtab = true
2️⃣ 某些语言(如 C/C++)专用缩进:
-- ~/.config/nvim/lua/config/autocmds.lua
vim.api.nvim_create_autocmd("FileType", {
pattern = { "c", "cpp", "h", "hpp" },
callback = function()
vim.opt_local.tabstop = 4
vim.opt_local.shiftwidth = 4
vim.opt_local.softtabstop = 4
vim.opt_local.expandtab = true
end,
})
📌 检查是否生效:
打开一个 .cpp
文件,输入以下命令:
:set tabstop?
:set shiftwidth?
:set softtabstop?
:set expandtab?
如果你看到:
tabstop=4
shiftwidth=4
softtabstop=4
expandtab
说明配置已经完全生效。
🔒 还不生效?排查建议:
- 插件如
conform.nvim
、lsp-format
、formatter.nvim
会覆盖缩进; - 某些
ftplugin/*.vim
会为特定语言设置不同缩进(可用:verbose set shiftwidth?
查看来源); - LSP 的格式化功能可能生效(如
clangd
); - 保存时触发
autocmd BufWritePre
调用了格式化器。
如果你正在用 LazyVim + 阅读老项目代码(如你那份 CentOS 6.10 C++ Makefile 项目),建议再配上:
:set foldmethod=indent
(缩进折叠 Allman 风格代码):set colorcolumn=130
(防止长行看不见)- 禁用所有自动格式化
需要我打包这些吗?可以打一个完整的 “代码阅读强化插件包”。