示例配置¶
不再提供
在 NvChad 安装过程中不再提供示例配置,因此本页面已过时,将在指南新版本中删除。 说明将尽快更新。
简介¶
NvChad 2.0 版本引入了在安装阶段创建 custom 文件夹的功能。它的创建是定制编辑器的起点,方法是修改其文件。在启动时安装,它允许编辑器在首次启动时具备 IDE 的基本功能,但也可以在 NvChad 安装后包含。
其安装最重要的方面是创建基本结构,以便包含一些高级功能,如语言服务器、linter 和 formatter。这些结构可以通过少量修改来集成必要的功能。
该文件夹是从 NvChad 的 GitHub 存储库中的示例创建的:(example-config)。
安装¶
要在安装过程中创建它,请在安装开始时出现的提问中回答“y”
是否要安装示例自定义配置? (y/N)
肯定的回答将启动一个过程,该过程将从 GitHub 中的 example-config 文件夹克隆内容到 ~/.config/nvim/lua/custom/,完成后,将从其中删除 .git 文件夹。
删除它允许将文件夹置于个人版本控制之下。
文件夹已准备就绪,下次启动 NvChad 时将用于在编辑器中输入自定义配置。
通过 example-config 提供的配置安装也可以在 NvChad 安装后进行,在这种情况下,仍然使用存储库,但通过手动操作检索。
标准的安装,不使用 example-config,仍然会创建一个 custom 文件夹来保存用户自定义的 chadrc.lua 文件,并且该文件应该被删除或保存在 backup 中,以便克隆能够运行。然后使用以下命令保存现有配置
mv ~/.config/nvim/lua/custom/ ~/.config/nvim/lua/custom.bak
并将 GitHub 存储库克隆到您的配置中
git clone https://github.com/NvChad/example_config.git ~/.config/nvim/lua/custom
该命令将在线存储库的全部内容复制到 ~/.config/nvim/lua/custom/
文件夹,复制隐藏的 .git
文件夹,您必须手动删除它才能切换到个人版本控制。要删除它,请运行以下命令
rm rf ~/.config/nvim/lua/custom/.git/
文件夹已准备就绪,下次启动 NvChad 时将用于在编辑器中输入自定义配置。
结构¶
custom 文件夹的结构包含多个配置文件和一个 configs
文件夹,其中包含 plugins.lua 中设置的插件选项文件。
为插件设置使用单独的文件可以使 plugins.lua 文件更加简洁,并且可以在定制插件代码的同时只处理插件代码。这也是开发将来要添加的插件推荐的方法。
创建的结构如下
custom/
├── chadrc.lua
├── configs
│ ├── conform.lua
│ ├── lspconfig.lua
│ └── overrides.lua
├── highlights.lua
├── init.lua
├── mappings.lua
├── plugins.lua
└── README.md
正如我们所见,该文件夹包含一些与 NvChad 基本结构中遇到的文件名相同的文件的名称。这些文件允许您集成配置并覆盖编辑器的基本设置。
结构分析¶
现在让我们来检查一下它的内容
主文件¶
chadrc.lua¶
---@type ChadrcConfig
local M = {}
-- Path to overriding theme and highlights files
local highlights = require "custom.highlights"
M.ui = {
theme = "onedark",
theme_toggle = { "onedark", "one_light" },
hl_override = highlights.override,
hl_add = highlights.add,
}
M.plugins = "custom.plugins"
-- check core.mappings for table structure
M.mappings = require "custom.mappings"
return M
该文件通过 ~/.config/nvim/lua/core/utils.lua 文件中设置的 load_config
函数插入到 Neovim 配置中。该函数负责加载默认设置,如果存在,也加载 custom 文件夹中的 chadrc.lua 文件。
M.load_config = function()
local config = require "core.default_config"
local chadrc_path = vim.api.nvim_get_runtime_file("lua/custom/chadrc.lua", false)[1]
...
它的作用是将 custom 文件夹中的文件插入到 NvChad 配置中,然后与默认文件一起使用来启动 Neovim 实例。文件通过 `require' 函数插入到配置树中,例如
require("custom.mappings")
字符串 custom.mappings 表示文件的相对路径(不带扩展名),这与默认路径(在本例中为 ~/.config/nvim/lua/)相反。点代替斜杠,因为这是 Lua 代码的约定(在 lua 语言 中没有“目录”的概念)。
总之,我们可以说上述调用将 custom/mappings.lua
文件中编写的配置插入到 NvChad 映射中,从而插入调用 custom/plugins.lua
中设置的插件命令的快捷方式。
文件中的一个部分还覆盖了 core/default_config.lua
中包含的一些 NvChad 用户界面配置设置,特别是 M.ui 部分,该部分允许选择浅色或深色主题。
在文件末尾,设置了 require 调用到对应的字符串 custom/plugins.lua
文件
M.plugins = "custom.plugins"
这样,custom/plugins.lua 中设置的插件就与构成 NvChad 配置的插件一起传递给 lazy.nvim 进行安装和管理。在这种情况下,包含不在 Neovim 树中。而是,它在 lazy.nvim 的配置中,因为该插件通过调用 vim.go.loadplugins = false
完全禁用了相关的编辑器功能。
init.lua¶
此文件用于覆盖 core/init.lua
中定义的设置,例如缩进或交换写入间隔到磁盘。它也用于创建自动命令,如文件中注释掉的行所示。一个例子可能是以下内容,其中包含了一些关于以 Markdown 格式编写文档的设置
--local autocmd = vim.api.nvim_create_autocmd
-- settings for Markdown
local opt = vim.opt
opt.tabstop = 4
opt.softtabstop = 4
opt.shiftwidth = 4
opt.shiftround = false
opt.expandtab = true
opt.autoindent = true
opt.smartindent = true
-- Auto resize panes when resizing nvim window
--autocmd("VimResized", {
-- pattern = "*",
-- command = "tabdo wincmd =",
-- })
这其中,它将 2 个空格的制表符替换为更适合 Markdown 代码的 4 个空格制表符。
plugins.lua¶
此文件用于将要添加的插件添加到基础 NvChad 配置中的插件。插件的添加在专门介绍 插件管理器 的页面中有详细说明。
由 example-config 创建的 plugins.lua 文件在第一部分包含许多自定义项,用于覆盖插件定义选项和默认插件配置。我们不需要修改文件的这一部分,因为开发人员为此目的准备了特殊文件,这些文件存在于 config 文件夹中。
接下来是插件的安装。创建该插件是为了作为示例,以便您熟悉 lazy.nvim 使用的格式。
-- Install a plugin
{
"max397574/better-escape.nvim",
event = "InsertEnter",
config = function()
require("better_escape").setup()
end,
},
您可以在此插件之后和最后一个括号之前插入所有其他插件。有适合各种目的的插件生态系统。您可以访问 Neovimcraft 进行初步了解。
mappings.lua¶
此文件用于将调用其他插件命令所需的映射(键盘快捷键)包含到配置树中。
此处也提供了一个示例设置,以便可以研究其格式
M.general = {
n = {
[";"] = { ":", "enter command mode", opts = { nowait = true } },
},
}
此映射为 NORMAL 状态 n =
输入字符 ;,按下键盘上的此字符会播放字符 :。此字符是用于进入 COMMAND 模式的字符。还设置了 nowait = true
选项以立即进入该模式。这样,在具有美国 QWERTY 布局的键盘上,我们将无需使用 Shift 来进入 COMMAND 模式。
技巧
对于欧洲键盘(例如意大利语)的用户,建议将字符 ; 替换为 ,。
highlights.lua¶
该文件用于自定义编辑器的样式。此处编写的设置用于更改字体样式(粗体、斜体)、元素背景色、前景颜色等。
Configs 文件夹¶
此文件夹包含 custom/plugins.lua 文件中使用的所有配置文件,用于更改处理语言服务器 (lspconfig)、linter/formatter (conform) 的插件的默认设置,以及覆盖 treesitter、mason 和 nvim-tree (override) 的基本设置。
configs/
├── conform.lua
├── lspconfig.lua
└── overrides.lua
lspconfig.lua¶
lspconfig.lua 文件设置编辑器可以使用的本地语言服务器。这将为支持的文件提供高级功能,如自动完成或代码片段,以便快速创建代码块。要将我们的 lsp 添加到配置中,我们只需编辑 NvChad 开发人员专门准备的表格(在 lua 中,下方用花括号表示的是一个表格)
local servers = { "html", "cssls", "tsserver", "clangd" }
正如我们所见,一些服务器已默认设置。要添加新的服务器,请将其添加到表的末尾。可用的服务器可以在 mason packages 中找到,其配置可以参考 lsp server configurations。
例如,如果我们还想支持 yaml
语言,我们可以像下面的示例一样添加它
local servers = { "html", "cssls", "tsserver", "clangd", "yamlls" }
但是,更改文件并不意味着安装相关的语言服务器。这必须使用 Mason 单独安装。为 yaml 提供支持的语言服务器是 yaml-language-server,我们必须使用命令 :MasonInstall yaml-language-server
来安装它。此时,例如,我们将能够控制 Rocky Linux 文档页面的标题(frontmatter)中编写的代码。
conform.lua¶
此文件配置了一些用于控制和格式化编写代码的功能。编辑此文件需要比前一个文件更多的配置研究。有关可用组件的概述,可以在 builtins page 上找到。
同样,创建了一个表格,formatters_by_ft 表格,用于输入自定义项
--type conform.options
local options = {
lsp_fallback = true,
formatters_by_ft = {
lua = { "stylua" },
javascript = { "prettier" },
css = { "prettier" },
html = { "prettier" },
sh = { "shfmt" },
},
}
如您所见,在初始配置中只包含标准格式化器。例如,您可能需要一个 Markdown 语言的格式化器,在这种情况下,您可以添加,例如 Markdownlint
markdown = { "markdownlint" },
同样,配置需要安装相应的包,这可以使用 Mason 完成
:MasonInstall markdownlint
注意
此格式化程序的配置还需要在您的主文件夹中创建一个配置文件,这在本文件中不予讨论。
overrides.lua¶
overrides.lua 文件包含要对默认插件设置进行的更改。要应用更改的插件在 custom/plugins.lua
文件的 -- Override plugin definition options 部分通过使用 opts 选项(例如 opts = overrides.mason
)指定。
在初始配置中,有三个插件被标记为需要覆盖,它们是 treesitter、mason 和 nvim-tree。暂时忽略 nvim-tree,我们将重点关注前两者,它们允许我们显著改变编辑体验。
treesitter 是一个代码解析器,负责以交互方式对其进行格式化。每次我们保存一个被 treesitter 识别的文件时,它都会被传递给解析器,解析器会返回一个缩进和高亮显示的代码树,使其在编辑器中更容易阅读、理解和编辑。
处理此问题的代码部分如下
M.treesitter = {
ensure_installed = {
"vim",
"lua",
"html",
"css",
"javascript",
"typescript",
"tsx",
"c",
"markdown",
"markdown_inline",
},
indent = {
enable = true,
-- disable = {
-- "python"
-- },
},
}
现在,遵循前面的示例,如果我们希望 Rocky Linux 文档页面的 frontmatter 被正确高亮显示,我们可以在最后一个解析器设置之后的 ensure_installed
表中添加对 yaml 的支持。
...
"tsx",
"c",
"markdown",
"markdown_inline",
"yaml",
...
下次我们打开 NvChad 时,我们刚刚添加的解析器也将被自动安装。
要使解析器直接在 NvChad 的运行实例中可用,我们始终可以在不编辑文件的情况下安装它,使用命令
:TSInstall yaml
文件中紧接着是关于 Mason 安装服务器的部分。此表中的所有服务器都可以通过命令 :MasonInstallAll
一次性安装(创建 custom 文件夹时也会调用此命令)。这部分内容如下
M.mason = {
ensure_installed = {
-- lua stuff
"lua-language-server",
"stylua",
-- web dev stuff
"css-lsp",
"html-lsp",
"typescript-language-server",
"deno",
"prettier",
},
}
再次,遵循我们启用 yaml 支持的初始示例,通过手动安装服务器,我们可以确保它始终被安装,方法是将其添加到表中
...
"typescript-language-server",
"deno",
"prettier",
-- yaml-language-server
"yaml-language-server",
...
尽管这一点在 NvChad 运行实例上可能并不重要,因为我们可以随时手动安装缺少的服务器,但它在将我们的配置从一台机器转移到另一台机器时非常有用。
例如,假设我们已经配置了 custom
文件夹,并希望将其转移到另一个 NvChad 安装。如果我们配置了此文件,在复制或克隆我们的 custom
文件夹后,:MasonInstallAll
就足以在另一台安装上准备好所有服务器以供使用。
配置的最后一部分是 M.nvimtree
部分,它负责配置 nvim-tree,通过启用在文件树中显示与 git 存储库相关状态的功能
git = {
enable = true,
},
它们的突出显示和相应的图标
renderer = {
highlight_git = true,
icons = {
show = {
git = true,
},
},
},
结论¶
NvChad 2.0 引入了在首次安装时创建 custom
文件夹的可能性,这无疑对所有第一次接触该编辑器的用户提供了极大的帮助。对于那些已经使用过 NvChad 的用户来说,这也能节省大量时间。
得益于它的引入和 Mason 的使用,集成自己的功能变得简单快捷。只需做一些修改,您就可以立即准备好使用 IDE 编写代码。
作者:Franco Colussi
贡献者:Steven Spencer, Ganna Zhyrnova