通过 Nvchad 更方便地使用 Neovim
前段时间有朋友推荐了一个 neovim 的配置集工具 Nvchad,考虑到两点个人原因(一是最近写代码比较少,用进废退;另一个是年纪大了记忆力下降了),有必要记录一下配置过程。
环境
- 硬件:14寸 M1 Pro 版 Macbook Pro 2021 款;
- 系统:macOS 12.3.1
- 终端工具:iterm2
- 包管理工具:brew
准备工具
-
使用 brew 安装 neovim
brew install neovim
-
使用 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
设置主题
最近用的比较多的颜色主题是 Gruvbox,Nvchad也支持,打开 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 未定义的问题,等后面有时间会补充上。