vim是一个可以高度定制化的编辑器,但是大部分人在编码过程中更多的是使用各种IDE,比如Jetbrains、VsCode等等,主要是由于vim的功能过于简单,如果想要把它配置成炫酷漂亮、功能齐全的IDE,需要付出很多的精力和时间。今天就介绍一款工具NvChad,可以让你快速将vim打造成功能齐全的IDE。
本文章前半部分主要为视频《使用一行命令将NeoVim打造成功能齐全的IDE》的笔记,不想查看前半部分,可以直接看这个视频,如果想深入自定义部分,可以查看最后自定义的相关内容。
环境配置
安装NeoVim
不是要说vim吗?为什么要安装NeoVim?NeoVim是vim的一个分支,它在0.5.x版本引入Lua编程语言作为编辑器一等语言,相比传统的vimscript脚本,Lua作为通用编程语言,代码更清晰、运行速度快、语法也很简单。现在很多vim插件也都有基于Lua原生NeoVim版本,所以它脱离了传统vim的约束,更加现代化。
NeoVim官方网站: https://neovim.io/
这里NvChad推荐安装0.8.3或者以上版本。具体安装方式不同系统有所差异,可以自行查阅NeoVim官方文档。
如果你使用Windows系统,建议使用WSL,我更习惯使用Arch Linux WSL,微软官方商店就可以下载到,它能保证所有下载的软件基本都是最新的。我这里使用的安装命令就是:
sudo pacman -S neovim
安装后可能你还想所有文件都是用vim
命令打开,而不是使用繁琐的nvim
打开,此时你就需要使用alias
设置别名。如果需要一直生效还需要把它写入shell的启动脚本里面。如果是zsh就写入到~/.zshrc
,如果不知道用的什么shell可以使用echo $SHELL
命令查看。
# 单次别名,只在当前会话有效
alias vim=nvim
# 将别名写入shell启动脚本里面,可以一直有效
# 我这里使用了oh-my-zsh,所以是写到~/.zshrc
# 具体看情况,你的也可能是写入到~/.bashrc里面
echo 'alias vim=nvim' >> ~/.zshrc
安装Nerd Font
由于常规字体不包含图标数据,我们在使用vim作为编辑器,比如在文件树中,不同语言要显示不同图标,如果字体不支持就会显示为方块。所以这里建议安装Nerd Font,因为它在字体中包含了很多图标。
官方网站:https://www.nerdfonts.com/
如果是windows系统,建议安装哪些名字为XXX Windows Compatible.ttf
的字体文件。
然后很重要的一步,就是把你的Terminal字体修改为刚才安装的带有NF
结尾的字体,保存。
安装ripgrep
这一步是可选的,如果需要使用Telescope插件来进行文件的grep检索,建议安装。
sudo pacman -S ripgrep
安装NvChad
NvChad已经帮我们集成了很多需要使用的功能,所以直接安装即可。
在安装之前需要先备份你之前的nvim配置,并清除nvim缓存:
# 备份旧的配置
mv ~/.config/nvim ~/.config/nvim.backup
# 清理nvim缓存
rm -rf ~/.local/share/nvim
然后安装NvChad。
git clone https://github.com/NvChad/NvChad ~/.config/nvim --depth 1 && nvim
此时你可以看到一个提示,是否安装样例个性化配置,先输入N
,不安装。
然后可以看到一个安装默认插件的界面,等待它安装完毕即可。
安装完成后,可以看到安装完毕后的Notes界面,这就代表安装完毕了。
功能预览
主题切换
<Space>th
:打开主题切换器,th是theme的前两个字母Ctrl + n
: 下一个,n代表nextCtrl + p
: 上一个,p代表previous- 也可以直接输入主题名字进行选择切换
语法高亮
NvChad的语法高亮通过nvim-treesitter
插件实现。
nvim-treesitter: https://github.com/nvim-treesitter/nvim-treesitter
treesitter官网:https://tree-sitter.github.io/tree-sitter/
命令概览:
:TSInstall XXX
: 安装对应语言语法高亮,比如:TSInstall go
或者:TSInstall rust
:TSInstallInfo
: 这个命令可以看到TreeSitter支持哪些语言语法高亮,哪些安装了,哪些没安装
文件树
NvChad的文件树功能是通过nvim-tree
插件实现的。
nvim-tree: https://github.com/nvim-tree/nvim-tree.lua
命令概览:
Ctrl + n
: 打开文件树j/k
: 上下移动o/回车
: 打开文件/文件夹m
: 标记文件(mark)/取消标记,方便在大型项目中快速找到a
: 新建文件c
: 复制文件p
: 粘贴文件r
: 重命名d
: 删除文件
文件跳转
在开发过程中,我们更多的不是通过文件树来查找文件,而是通过快速搜索打开文件。
命令概览:
<Space>ff
: 查找文件<Space>fb
: 查找缓冲区中已经打开的文件
备忘清单
NvChad提供了一个备忘清单的功能,可以帮助我们快速查找参考键盘命令。
命令概览:
<Space>ch
: 打开备忘清单,ch代表cheat的前两个字母j/k
: 上翻或者下翻ESC
: 关闭备忘清单<Space>等待1秒
:下方就会给出部分命令的提示,还会写明作用,继续输入相应的命令,就会提示下一个字母会是什么功能。
窗口跳转
命令概览:
Ctrl + h
: 移动到左边窗口Ctrl + l
: 移动到右边窗口Ctrl + j
: 移动到下方窗口Ctrl + k
: 移动到上方窗口:vsp
: 垂直分屏:sp
: 水平分屏<Space>n
: 绝对行号显示/关闭<Space>rn
: 相对行号显示/关闭
标签页
命令概览:
<Tab>
: 向右翻动标签页Shift + <Tab>
: 向左翻动标签页<Space>x
: 关闭当前标签页
Terminal
命令概览:
Alt + h
: 打开/关闭水平命令窗口Alt + v
: 打开/关闭垂直命令窗口
自定义
如果需要自定义,NvChad的自定义主要是在~/.config/nvim/lua/custom
目录下面。
NvChad也提供了一个样例配置仓库https://github.com/NvChad/example_config,如果想省事,可以直接把这个仓库clone到custom目录下。
chadrc.lua
: 用于存放NvChad的配置信息init.lua
: 主要用于存放nvim的配置信息mappings.lua
: 主要用于存放一些快捷键的映射信息plugins.lua
: 主要用于存放安装的插件
先看custom/init.lua
,这里可以放置一些nvim的基础配置,比如:
-- 设置右侧参考线,单行最长120个字符
vim.opt.colorcolumn = "120"
-- 设置相对行号
vim.wo.number = true
vim.wo.relativenumber = true
再来看custom/chadrc.lua
:
local M = {}
-- 我们之前设置的主题存储在这里
M.ui = {theme = 'catppuccin'}
-- 如果需要覆盖插件配置可以添加这一行,并添加plugins.lua文件
M.plugins = 'custom.plugins'
-- 引入快捷键的配置
M.mappings = require "custom.mappings"
return M
最后是custom/plugins.lua
,这里主要就是引入一些插件,并返回插件列表:
local plugins = {
}
return plugins
定义语法高亮
比如我们前面提到的treesitter可以用作代码的语法高亮,但是默认只开启了lua
,我们就可以在custom/plugins.lua
里面添加我们需要的语言:
local plugins = {
-- 安装平时使用语言的treesitter
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
-- default
"vim", "lua",
-- 前端开发
"html", "css", "javascript", "typescript",
"tsx", "json",
-- go语言
"go", "gomod", "gosum",
-- rust语言
"rust", "toml",
-- 其他
"dockerfile", "git_config", "gitignore",
"markdown", "yaml",
},
},
}
}
return plugins
自定义定义LSP配置
首先我们可以使用Mason来管理我们的LSP相关文件,在custom/plugins.lua
内添加我们需要安装的语言的LSP:
-- ...前面的先省略了
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"lua-language-server",
"html-lsp",
"prettier",
"stylua"
},
},
}
我们还需要覆盖默认的lsp配置,我们先添加自定义的lsp配置,创建custom/configs/lspconfig.lua
:
local on_attach = require("plugins.configs.lspconfig").on_attach
local capabilities = require("plugins.configs.lspconfig").capabilities
local lspconfig = require "lspconfig"
local servers = { "html", "cssls", "clangd"}
for _, lsp in ipairs(servers) do
lspconfig[lsp].setup {
on_attach = on_attach,
capabilities = capabilities,
}
end
-- 对于不想使用通用配置的语言lsp,我们还可以自定义
--
-- lspconfig.html.setup {
-- on_attach = on_attach,
-- capabilities = capabilities,
-- }
--
-- lspconfig.cssls.setup {
-- on_attach = on_attach,
-- capabilities = capabilities,
-- }
修改custom/plugins.lua
,添加以下代码
{
"neovim/nvim-lspconfig",
config = function()
require "plugins.configs.lspconfig"
require "custom.configs.lspconfig"
end,
},
代码格式化
代码格式化建议安装null-ls
来管理,修改custom/plugins.lua
{
"neovim/nvim-lspconfig",
dependencies = {
"jose-elias-alvarez/null-ls.nvim",
config = function()
require "custom.configs.null-ls"
end,
},
config = function()
require "plugins.configs.lspconfig"
require "custom.configs.lspconfig"
end,
}
这里让null-ls
在lspconfig
之后加载,因为lspconfig
是懒加载的。
创建custom/configs/null-ls.lua
:
local null_ls = require "null-ls"
local formatting = null_ls.builtins.formatting
local lint = null_ls.builtins.diagnostics
local sources = {
formatting.prettier,
formatting.stylua,
lint.shellcheck,
}
null_ls.setup {
debug = true,
sources = sources,
}
格式化的快捷键为<Space>fm
快捷键
NVim中快捷键的表示为:
<C>
->Ctrl
<leader>
->Space
<A>
->Alt
S
->Shift
默认情况下,快捷键映射是定义在core.mappings
(core/mappings.lua
)
你也可以使用NvCheatsheet
或者Telescope keymaps
来列出所有快捷键。
为了定义快捷键,我们可以修改custom/mappings.lua
文件:
local M = {}
-- 禁用部分快捷键
M.disabled = {
n = {
["<leader>h"] = "",
["<C-a>"] = ""
}
}
-- 定义你自己的快捷键
M.abc = {
n = {
["<C-n>"] = {"<cmd> Telescope <CR>", "Telescope"}
["<C-s>"] = {":Telescope Files <CR>", "Telescope Files"}
}
i = {
["jk"] = { "<ESC>", "escape insert mode" , opts = { nowait = true }},
-- ...
}
}