跳至内容

示例配置

不再提供

示例配置在 NvChad 安装过程中不再提供,因此此页面已过时,将在新版本指南中删除。 指示将尽快更新。

简介

NvChad 2.0 版本引入了在安装阶段创建 自定义 文件夹的功能。 它的创建是通过修改其文件来定制编辑器的起点。 在引导时安装它允许编辑器在第一次启动时拥有 IDE 的基本功能,但也可以在安装 NvChad 之后包含它。

它安装最重要的方面是为包含一些高级功能(如语言服务器、linters 和格式化程序)创建基本结构。 这些结构允许在稍作修改的情况下将必要的功能集成。

该文件夹是从 NvChad 的 GitHub 存储库中的示例文件夹创建的:(example-config)。

安装

要在安装过程中创建它,在安装开始时回答“y”到我们被问到的问题。

你想安装示例自定义配置吗? (y/N)

肯定的答案将启动一个过程,该过程会将 example-config 文件夹的内容从 GitHub 克隆到 ~/.config/nvim/lua/custom/,并在完成后,将从其中删除 .git 文件夹。
删除它允许将文件夹放在个人版本控制下。

该文件夹已准备就绪,将在下次启动 NvChad 时使用,以便将自定义配置输入编辑器。

example-config 提供的配置安装也可以在安装 NvChad 之后完成,在这种情况下,仍然使用该存储库,但通过手动操作进行检索。

没有 example-config 的标准安装仍然会创建一个 custom 文件夹,在其中保存用于用户自定义的 chadrc.lua 文件,并且应将其删除或保存在 备份 中以允许克隆运行。 然后使用以下命令保存现有配置

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 部分,它允许例如选择浅色或深色主题。

在文件末尾设置了对 custom/plugins.lua 文件的 require 调用,该文件对应于字符串

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 个空格的制表符替换为 4 个空格的制表符,更适合 Markdown 代码。

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 选项以立即进入该模式。这样,在使用 US QWERTY 布局的键盘上,我们就无需使用 Shift 进入 COMMAND 模式。

提示

对于欧洲键盘用户(如意大利语键盘),建议将字符 ; 替换为 ,

highlights.lua

该文件用于自定义编辑器的样式。这里编写的设置用于更改字体样式(粗体斜体)、元素的背景颜色、前景色等。

Configs 文件夹

该文件夹包含 custom/plugins.lua 文件中使用的所有配置文件,用于更改处理语言服务器(lspconfig)、linter/格式化程序(conform)的插件的默认设置,以及用于覆盖 treesittermasonnvim-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

该文件配置了一些功能,这些功能旨在控制和格式化编写的代码。编辑此文件需要比上一个文件进行更多配置方面的研究。可以在 内置页面 上找到可用的组件概述。

同样,创建了一个表,即 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 文件的 -- 覆盖插件定义选项 部分中通过使用 **opts** 选项指定(例如:opts = overrides.mason)。

在初始配置中,有三个插件被标记为需要覆盖,它们是 treesittermasonnvim-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