nvim 缩进4空格 - 指南
要把 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(防止长行看不见)- 禁用所有自动格式化
需要我打包这些吗?可以打一个完整的 “代码阅读强化插件包”。

浙公网安备 33010602011771号