背景
默认的nvchad的配置为tab的宽度为2,因此,按一下tab键只能缩进两个空格。个人理解其主要原因为:nvchad的代码风格设定如下:
column_width = 120
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 2
quote_style = "AutoPreferDouble"
call_parentheses = "None"
其表明了使用使用空格作为缩进,且缩进的宽度为2。
在lua代码中,个人理解这个行为可以接受。但是,如果是其他代码,例如python、c、c++等,个人偏向于使用4个空格。因此,想把nvchad的配置做点个性化定制:如果是lua代码,则缩进为2。如果是其他,则缩进为4.
修改
修改前,我们先找到哪些变量是nvim中对tab宽度有影响的几个变量:
shiftwidth
:开启自动缩进或智能缩进后,可以通过设置shiftwidth来指定自动缩进的单位长度:tabstop
: 可以用来修改制表符在vim中的显示宽度,默认值是8,即一个制表符显示出来是8个空格的宽度。softtabstop
:当softtabstop的设置值与tabstop不同时,vim在编辑与显示文件时对制表符的处理会让用户“感觉”和修改ts的效果是一样的,包括按一下tab键和按一下backspace键的效果。而实际上,vim使用的是制表符与空格的混合格式,即如果空格长度不足一个ts,使用的就是空格,如果空格长度大于ts,则每逢ts个空格就将之替换为一个制表符。 注:x之类的命令仍然在实际字符之上操作。expandtab
:是否将tab转化为空格,当tabstop为n时,按一下tab就转化为n个空格;
我们找到nvchad中对这部分的定义,代码位于~/.config/nvim/lua/core/init.lua
local opt = vim.opt
opt.expandtab = true
opt.shiftwidth = 2
opt.smartindent = true
opt.tabstop = 2
opt.softtabstop = 2
可以发现,这几个变更属于全局的,因此,在所有的代码模式下缩进均为2[^1]。
为了对这部分进行修改,我们首先在custom/init.lua
中加入如下代码,把全局设定修改为4:
vim.opt.shiftwidth = 4
vim.opt.tabstop = 4
vim.opt.softtabstop = 4
然后使用autocmd根据lua将缩进配置成2.
vim.api.nvim_create_autocmd("FileType", {
pattern = "lua",
callback = function ()
vim.bo.shiftwidth = 2
vim.bo.tabstop = 2
vim.bo.softtabstop = 2
end,
})
然后重启nvim即可工作。
autocmd中设置的属性并非同上面一样,设置vim.opt,而是设置vim.bo。其主要原因是:如果设置的vim.opt的话,修改的是全局的配置。在打开lua文件后,所有的缩进都会变为2,因此,这里仅仅对buffer的option进行修改,使其只影响打开lua文件相关的buffer即可。
参考链接
- vim中缩进长度shiftwidth以及tabstop与softtabstop的区别 | liux's blog (liuxblog.com)
- VIM自动命令(autocmd)_sunny潘先生的博客-CSDN博客
- 从零开始匹配vim(1)——选项设置 - 知乎 (zhihu.com)
脚注
- 实际上,可以使用ftplugin来为不同的语言配置不同的插件,可以在ftplugin中进行具体的缩进设置。不过nvchad中没有ftplugin配置。
评论区