Skip to content
On this page

NvChad是如何工作的?

了解基础知识

在进入这个主题之前, 首先您应该了解 vim.tbl_deep_extend 函数, 该函数用于以递归形式合并tables和它们的值。

  • 函数 vim.tbl_deep_extend 通常用于合并两个tables, 其语法如下:
lua
-- table 1
local person = {
    name = "joe",
    age = 19,
}

-- table 2
local someone = {
    name = "siduck",
}

-- "force" 将会覆盖person table中的相同名字的值
local result = vim.tbl_deep_extend("force", person, someone)

-- result : 
{
    name = "siduck", -- 如你所见,name被覆盖了
    age = 19,
}

它甚至可以用于更复杂的tables中. 如前所述, 它以递归的方式运行, 这意味这它对嵌套table值同样生效:
lua
local person = {
    name = "joe",
    age = 19,
    skills = {"python", "java", "c++"}

    distros_used = {
        ubuntu = "5 years",
        arch = "10 minutes",
        manjaro = "10 years",
    }
}

local someone = {
    name = "siduck",
    skills = {"js", "lua"},

    distros_used = {
       ubuntu = "1 month",
       artix = "2 years"
    }
}

local result = vim.tbl_deep_extend("force", person, someone)

最终的table会合并table中的同名的每个属性, skillsdistros_used 具有相同的名字:

lua
{
   name = "siduck",
   age = 19

   skills = {"js", "lua"},

   distros_used = {
       ubuntu = "1 month",
       arch = "10 minutes",
       manjaro = "10 years",
       artix = "2 years"
   }
}

-- tbl_deep_extend 函数可以递归合并值, 但是如果有数组 (list), 它并不会合并列表内的值。 

-- 比如: 第一个table是 {"python", "java", "c++"},第二个table是 {"js","lua"}. 

-- 现在你可能以为合并后的结果是: { "python", "java", "c++", "lua"}

-- 但是并不是! 那样是错误的, 实际的最终结果只有 {"js","lua"}

总而言之, `tbl_deep_extend` 可以递归合并字典表 (即table具有 `key/value` 键值对, 而不是列表)。

⚠️ 注意

tbl_deep_extend 函数只能用于合并字典表,无法用于合并列表。

配置结构

lua
├── init.lua ( main init.lua )

├── lua
│   │
│   ├── core
│   │   ├── default_config.lua
│   │   ├── mappings.lua
│   │   ├── utils.lua 
│   │   └── init.lua  
│   │
│   ├── plugins
│   │    ├── init.lua 
│   │    └── configs
│   │        ├── cmp.lua
│   │        └── other configs
│   │  
│   │   USER CONFIG  
│   │  
│   ├── custom *
│   │   ├── chadrc.lua
│   │   ├── init.lua
│   │   ├── more files, dirs

  • init.lua - 主配置文件
  • core/default_config - 返回NvChad中的默认配置选项表(table) 。
  • core/mappings - 默认 mappings
  • core/init - 默认 globals, nvim options, commands, autocmds
  • core/utils - 工具函数库。

自定义配置

custom 目录中有2个重要的文件,用于扩展NvChad:

  • custom/chadrc.lua 用于覆盖 default_config.lua 文件中的配置。
  • custom/init.lua 在主 init.lua 中运行, 它主要包含 vim options, globals, autocmds, commands 等等.

GitHub Logo

从现在开始, 每当我们谈论路径时, 请记住他们都是 nvim 配置目录(默认应该是 ~/.config/nvim/)下的lua目录。

  • 不建议在 custom 目录之外进行更改, 因为 NvChad 配置是一个git仓库, it gitignores 只忽略了custom目录, 而NvChad是使用 git pull 来更新配置。

  • custom 目录之外的任何其他文件变更都会被git视为变更, 这也意味这NvChad无法使用fast-forward模式去拉取。

主题

您可以使用以下键盘映射来查看内置的所有主题: <leader> + th.

leader 在NvChad中默认是 space,即空格键。

键盘映射

如果您向知道所有的键盘映射,可以运行以下命令:

  • NvCheatsheet
  • Telescope keymaps

Powered by VitePress