通过 Nvchad 更方便地使用 Neovim

前段时间有朋友推荐了一个 neovim 的配置集工具 Nvchad,考虑到两点个人原因(一是最近写代码比较少,用进废退;另一个是年纪大了记忆力下降了),有必要记录一下配置过程。

环境

  • 硬件:14寸 M1 Pro 版 Macbook Pro 2021 款;
  • 系统:macOS 12.3.1
  • 终端工具:iterm2
  • 包管理工具:brew

准备工具

  1. 使用 brew 安装 neovim

    brew install neovim
    
  2. 使用 brew 安装 ripgrep

    brew install ripgrep
    

安装 Nvchar

执行以下命令安装:

git clone https://github.com/NvChad/NvChad ~/.config/nvim --depth 1
nvim +'hi NormalFloat guibg=#1e222a' +PackerSync

配置 Nvchad

后续配置文件操作均以 ~/.config/nvim作为基础目录,即执行终端命令的 PWD 均为此目录。

创建自定义文件

# 创建自定义文件目录
mkdir lua/custom
# 复制示例初始化文件
cp examples/init.lua lua/custom/init.lua
# 复制示例配置文件
cp examples/chadrc.lua lua/custom/chadrc.lua

安装代码高亮支持

Nvchad 套件安装了 TreeSitter 插件以支持更丰富的代码高亮特性,所以我们可以根据自己的需求安装所需语言的高亮支持,支持语言列表可以去插件网址查,打开 neovim,执行命令

:TSInstall css html http javascript vue vim json latex llvm make markdown python toml yaml c cpp swift lua dockerfile go gomod bash cmake 

设置主题

最近用的比较多的颜色主题是 GruvboxNvchad也支持,打开 neovim 使用快捷键调出颜色主题选择框,快捷键为<leader>+th,选择 gruvbox 敲回车键,按下Esc推出主题设置窗口,颜色主题立即生效。

Tips:这里需要注意的是,设置主题的前提是已创建自定义的文件!

配置快捷键

lua/init.lua 中配置快捷键,替换文件内容为如下:

-- example file i.e lua/custom/init.lua

-- MAPPINGS
local map = require("core.utils").map

map("n", "<leader>cc", ":Telescope <CR>")

map("n", "<leader>q", ":q <CR>")
map("i", "<leader>q", "<ESC> :q <CR>")
map("n", "<leader>w", ":w <CR>")
map("i", "<leader>w", "<ESC> :w <CR>")
map("n", "<leader>qq", ":x <CR>")
map("i", "<leader>qq", "<ESC> :x <CR>")

-- require("my autocmds file") or just declare them here

这里添加了我常用的快捷键用于保存文件和退出文件。

开启 Dashboard

新增目录lua/custom/plugins,并添加文件lua/custom/plugins/init.lua

mkdir lua/custom/plugins
touch lua/custom/plugins/init.lua

文件内容添加如下:

return {
	["goolord/alpha-nvim"] = {
    disable = false,
  }
}

lua/custom/chadrc.lua内容添加如下:

local userPlugins = require "custom.plugins"

M.plugins = {
   user = userPlugins
}

配置开启 Dashboard,保存后,nvim中执行命令:PackerSync,会同步插件安装goolord/alpha-nvim,重新打开 nvim 就会显示 dashboard。

配置 LSP

LSP(Language Server Protocl)用于提供代码编写的很多智能特性,需要配置一下。

安装 williamboman/nvim-lsp-installer

编辑文件 lua/custom/plugins/init.lua 添加内容后整体如下:

return {
  ["goolord/alpha-nvim"] = {
     disable = false,
  },
  ["williamboman/nvim-lsp-installer"] = {
  }
}

nvim 中执行命令 :PackerSync,会自动安装插件 williamboman/nvim-lsp-installer

添加配置文件 lspconfig.lua

lua/custom/plugins 中添加文件 lua/custom/plugins/lspconfig.lua,文件内容如下:

-- custom.plugins.lspconfig 

local M = {}

M.setup_lsp = function(attach, capabilities)
   local lsp_installer = require "nvim-lsp-installer"

   lsp_installer.settings {
      ui = {
         icons = {
            server_installed = "﫟" ,
            server_pending = "",
            server_uninstalled = "✗",
         },
      },
   }

   lsp_installer.on_server_ready(function(server)
      local opts = {
         on_attach = attach,
         capabilities = capabilities,
         settings = {},
      }

      server:setup(opts)
      vim.cmd [[ do User LspAttachBuffers ]]
   end)
end

return M

lua/custom/chadrc.lua 中指定 lspconfig 的配置文件为上述文件:

M.plugins = {
  user = userPlugins,
  options = {
    lspconfig = {
      setup_lspconf = "custom.plugins.lspconfig"
    }
  }
}

安装各种语言 LS

打开 nvim,执行命令:LspInstallInfo,就会打开一个安装配置窗口,按上下方向键选择对应语言的 LS,选择后按 i键即可添加支持。

常规配置

需要将 vim 中常规配置使用 lua 配置到 neovim。

lua/custom/chadrc.lua中添加以下内容:

M.options = {
   user = function ()
      vim.opt.number = true
      vim.opt.relativenumber = true
      vim.opt.encoding = "utf-8"
      vim.opt.fileencodings = "utf-8,ucs-bom,gb18030,gbk,gb2312,cp936"
      vim.opt.autoindent = true
      vim.opt.shiftwidth = 4
      vim.opt.tabstop = 4
      vim.opt.softtabstop = 4
      vim.opt.cursorline = true
      vim.opt.mouse = "a"

      -- File extension specific tabbing
      vim.cmd [[ autocmd Filetype sql,yaml,yml,toml,javascript,html,jinja.html,css,markdown,md,xml,vue,vue.html.javascript.css setlocal expandtab tabstop=2 shiftwidth=2 softtabstop=2 ]]
      vim.cmd [[ autocmd Filetype lua setlocal expandtab tabstop=3 shiftwidth=3 softtabstop=3 ]]
   end
}

保存重启 neovim 即刻生效。

配置格式化和语法提示

安装插件 null-ls

lua/custom/plugins/init.lua中添加null-ls相关内容,如下:

 ["jose-elias-alvarez/null-ls.nvim"] = {
      after = "nvim-lspconfig",
      config = function()
         require("custom.plugins.null-ls").setup()
      end,
 }

-- load it after nvim-lspconfig cuz we lazy loaded lspconfig

添加文件lua/custom/plugins/null-ls.lua,内容如下:

local null_ls = require "null-ls"
local b = null_ls.builtins

local sources = {

   b.formatting.prettierd.with { filetypes = { "html", "markdown", "css" } },
   b.formatting.deno_fmt,

   -- Lua
   b.formatting.stylua,
   b.diagnostics.luacheck.with { extra_args = { "--global vim" } },

   -- Shell
   b.formatting.shfmt,
   b.diagnostics.shellcheck.with { diagnostics_format = "#{m} [#{c}]" },
}

local M = {}

M.setup = function()
   null_ls.setup {
      debug = true,
      sources = sources,

      -- format on save
      on_attach = function(client)
         if client.resolved_capabilities.document_formatting then
            vim.cmd "autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_sync()"
         end
      end,
   }
end

return M

保存两个文件后,执行 :PackerSync,会安装 null-ls,重新打开后就可以格式化代码了,保存的时候会自动进行格式化。

至此,Neovim 的 Nvchad 基本可用,目前还存在一个小问题就是 lua 的语法分析的配置项需要完善,还需要屏蔽掉配置文件中显示 vim 未定义的问题,等后面有时间会补充上。


vim

1684 字

2022-05-02 13:00 +0000