要把 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 = 4vim.opt_local.shiftwidth = 4vim.opt_local.softtabstop = 4vim.opt_local.expandtab = trueend,
})
📌 檢查是否生效:
打開一個 .cpp
文件,輸入以下命令:
:set tabstop?
:set shiftwidth?
:set softtabstop?
:set expandtab?
如果你看到:
tabstop=4
shiftwidth=4
softtabstop=4expandtab
說明配置已經完全生效。
🔒 還不生效?排查建議:
- 插件如
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
(防止長行看不見)- 禁用所有自動格式化
需要我打包這些嗎?可以打一個完整的 “代碼閱讀強化插件包”。