侧边栏壁纸
博主头像
翠南山 博主等级

行动起来,活在当下

  • 累计撰写 11 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

配置nvchad的tab宽度

居不正
2023-05-08 / 0 评论 / 0 点赞 / 49 阅读 / 0 字

背景

默认的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宽度有影响的几个变量:

  1. shiftwidth:开启自动缩进或智能缩进后,可以通过设置shiftwidth来指定自动缩进的单位长度:
  2. tabstop: 可以用来修改制表符在vim中的显示宽度,默认值是8,即一个制表符显示出来是8个空格的宽度。
  3. softtabstop:当softtabstop的设置值与tabstop不同时,vim在编辑与显示文件时对制表符的处理会让用户“感觉”和修改ts的效果是一样的,包括按一下tab键和按一下backspace键的效果。而实际上,vim使用的是制表符与空格的混合格式,即如果空格长度不足一个ts,使用的就是空格,如果空格长度大于ts,则每逢ts个空格就将之替换为一个制表符。 注:x之类的命令仍然在实际字符之上操作。
  4. 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即可。

参考链接

  1. vim中缩进长度shiftwidth以及tabstop与softtabstop的区别 | liux's blog (liuxblog.com)
  2. VIM自动命令(autocmd)_sunny潘先生的博客-CSDN博客
  3. 从零开始匹配vim(1)——选项设置 - 知乎 (zhihu.com)

脚注

  1. 实际上,可以使用ftplugin来为不同的语言配置不同的插件,可以在ftplugin中进行具体的缩进设置。不过nvchad中没有ftplugin配置。
0

评论区