0x01 基础信息
- 主键:
<Space> - 配置路径:
~/.config/nvim - 插件管理器:lazy.nvim
- 基础框架:
LazyVim - 主题:solarized-oaska
- Shell:fish
0x02 LazyVim核心快捷键
2.1 基础操作
| 快捷键 | 功能 | 说明 |
|---|---|---|
<Space> | Leader主键 | 所有自定义快捷键的前缀 |
:LazyExtras | 打开LazyVim扩展 | 管理额外功能模块 |
:Lazy | 打开插件管理器 | 安装、更新、配置插件 |
:checkhealth | 检查系统健康 | 诊断配置问题 |
2.2 文件和缓冲区操作
| 快捷键 | 功能 | 说明 |
|---|---|---|
<leader>ff | 查找文件 | Telescope文件搜索 |
<leader>fr | 最近文件 | 最近打开的文件 |
<leader>fg | 全局搜索 | 在项目中搜索文本 |
<leader>fb | 缓冲区列表 | 当前打开的文件 |
<leader>bb | 切换缓冲区 | 在打开的文件间切换 |
<leader>bd | 删除缓冲区 | 关闭当前文件 |
<leader>bD | 强制删除缓冲区 | 强制关闭文件 |
2.3 窗口管理
<C->指的是键盘按键Ctrl
| 快捷键 | 功能 |
|---|---|
<C-h> | 移动到左窗口 |
<C-j> | 移动到下窗口 |
<C-k> | 移动到上窗口 |
<C-l> | 移动到右窗口 |
<C-up> | 增加窗口高度 |
<C-Down> | 减少窗口高度 |
<C-Left> | 减少窗口高度 |
<C-Right> | 增加窗口高度 |
0x03 自定义快捷键配置解读
3.1 智能复制粘贴
3.1.1 删除不影响剪贴板
-- 按下x: 直接删除一个字符,但不会改变复制的内容
keymap.set("n", "x", '"_x')| 快捷键 | 模式 | 功能 | 说明 |
|---|---|---|---|
x | Normal | 删除字符(不复制) | 删除单个字符但不覆盖剪贴板 |
3.1.2 智能粘贴
-- 按下 空格+p:粘贴复制的内容
keymap.set("n", "<Leader>p", '"0p') -- 在光标后面粘贴内容
keymap.set("n", "<Leader>P", '"0P') -- 在光标前面粘贴内容
keymap.set("v", "<Leader>p", '"0p') -- 在选中的内容后粘贴| 快捷键 | 模式 | 功能 | 说明 |
|---|---|---|---|
<space>p | Normal/Visual | 粘贴复制的内容 | 粘贴寄存器0的内容(最后复制的内容) |
<space>P | Normal/Visual | 在光标前粘贴 | 在光标前粘贴寄存器0的内容 |
3.1.3 智能删除和编辑
-- 按下 空格 + c:删除内容并直接进入编辑模式
keymap.set("n", "<Leader>c", '"_c') -- 删除当前内容进入插入模式
keymap.set("n", "<Leader>C", '"_C') -- 删除到行尾进入插入模式
keymap.set("v", "<Leader>c", '"_c') -- 删除选中内容后进入插入模式
keymap.set("v", "<Leader>C", '"_C') -- 删除选中内容到行尾并进入插入模式| 快捷键 | 模式 | 功能 | 说明 |
|---|---|---|---|
<space>c | Normal/Visual | 删除并进入插入模式 | 删除内容不影响剪贴板 |
<space>C | Normal/Visual | 删除到行尾并插入 | 删除到行尾不影响剪贴板 |
3.1.4 智能删除
-- 按下 空格 + d:删除内容但不会影响复制的内容
keymap.set("n", "<Leader>d", '"_d') -- 删除光标所在的内容
keymap.set("n", "<leader>D", '"_D') -- 删除光标到行尾的内容
keymap.set("v", "<Leader>d", '"_d') -- 删除选中内容
keymap.set("v", "<Leader>D", '"_D') -- 删除选中内容到行尾| 快捷键 | 模式 | 功能 | 说明 |
|---|---|---|---|
<space>d | Normal/Visual | 删除(不复制) | 删除内容但不覆盖剪贴板 |
<space>D | Normal/Visual | 删除到行尾(不复制) | 删除到行尾但不覆盖剪贴板 |
3.2 标签页管理
-- 新建标签页
keymap.set("n", "te", ":tabedit")
-- 切换到下一个标签页
keymap.set("n", "<tab>", ":tabnext<Return>", opts)
-- 切换到上一个标签页
keymap.set("n", "<s-tab>", ":tabprev<Return>", opts)| 快捷键 | 功能 | 说明 |
|---|---|---|
te | 新建标签页 | 输入后按回车,可指定文件名 |
<Tab> | 下一个标签页 | |
<Shift-Tab> | 上一个标签页 |
0x04 编辑器选项配置
4.1 文件编码和显示
vim.opt.encoding = "utf-8"
vim.opt.fileencoding = "utf-8"
vim.opt.number = true
vim.opt.title = true| 配置项 | 值 | 说明 |
|---|---|---|
encoding | utf-8 | 内部编码格式 |
fileencoding | utf-8 | 文件保存编码 |
number | true | 显示行号 |
title | true | 显示窗口标题 |
4.2 缩进和格式化
vim.opt.autoindent = true
vim.opt.smartindent = true
vim.opt.expandtab = true
vim.opt.shiftwidth = 2
vim.opt.tabstop = 2
vim.opt.smarttab = true| 配置项 | 值 | 说明 |
|---|---|---|
autoindent | true | 自动缩进 |
smartindent | true | 智能缩进 |
expandtab | true | 使用空格代替tab |
shiftwidth | 2 | 缩进宽度 |
tabstop | 2 | tab显示宽度 |
smarttab | true | 智能tab处理 |
搜索和滚动
vim.opt.hlsearch = true
vim.opt.ignorecase = true
vim.opt.scrolloff = 10
vim.opt.inccommand = "split"| 配置项 | 值 | 说明 |
|---|---|---|
hlsearch | true | 高亮搜索结果 |
ignorecase | true | 搜索忽略大小写 |
scrolloff | 10 | 滚动时保持的行数 |
inccommand | split | 替换命令实时预览 |
4.4 窗口分割
vim.opt.splitbelow = true
vim.opt.splitright = true
vim.opt.splitkeep = "cursor"| 配置项 | 值 | 说明 |
|---|---|---|
splitbelow | true | 水平分割时新窗口在下方 |
splitright | true | 垂直分割时新窗口在右方 |
splitkeep | cursor | 分割时光标保持位置 |
0x05 插件功能和快捷键
5.1 代码生成和重构(coding.lua)
5.1.1 Neogen-注释生成
{
"danymat/neogen",
keys = {
{
"<leader>cc",
function()
require("neogen").generate({})
end,
desc = "Neogen Comment",
},
},
opts = { snippet_engine = "luasnip"},
}| 快捷键 | 功能 | 说明 |
|---|---|---|
<space>cc | 生成注释 | 为函数、类等生成文档注释 |
5.1.2 符号大纲
{
"simrat39/symbols-outline.nvim",
keys = { { "<leader>cs", "<cmd>SymbolsOutline<cr>", desc = "Symbols Outline" } },
opts = {
position = "right",
},
}| 快捷键 | 功能 | 说明 |
|---|---|---|
<space>cs | 符号大纲 | 在右侧显示文件结构 |
5.2 Markdown增强功能
5.2.1 语法高亮增强(markdown-enhanced.lua)
支持的代码块语言:
- html, python, bash, javascript, typescript
- json, yaml, css, lua, vim, powershell
- sql, go, rust, c, cpp, java
配置特点:
vim.g.vim_markdown_folding_disable = 1 -- 禁用折叠
vim.g.vim_markdown_conceal_code_blocks = 0 -- 不隐藏代码块分隔符
vim.g.vim_markdown_conceal = 0 -- 不隐藏链接5.2.2 表格编辑(vim-table-mode)
| 快捷键 | 功能 | 说明 |
|---|---|---|
<space>tm | 切换表格模式 | 启用/禁用表格编辑模式 |
5.2.3 实时预览
{
"toppair/peek.vim",
build = "deno task --quiet build:fast",
ft = { "markdown" },
}| 快捷键 | 功能 | 说明 |
|---|---|---|
<space>op | 切换预览 | 打开/关闭markdown预览 |
<space>mp | 打开预览 | 打开Markdown预览 |
<space>mc | 关闭预览 | 关闭Markdown预览 |
5.3 智能编辑功能(smart-editing.lua)
5.3.1 自动配对(nvim-autopairs)
自动配对的符号有:
- 引号:
',", - 括号:
(),[],{} - 其他:
<>,**,*
快捷键:
| 快捷键 | 功能 | 说明 |
|---|---|---|
<M-e> | 快速包围 | 快速用符号包围文本 |
5.3.2 Tab跳出(tabout.nvim)
| 快捷键 | 功能 | 说明 |
|---|---|---|
<Tab> | 跳出符号 | 从配对符号中跳出 |
<S-Tab> | 反向跳出 | 反向跳出配对符号 |
0x06 LazyVim 默认功能
6.1 文件操作
| 快捷键 | 功能 | 说明 |
|---|---|---|
<leader>fn | 新建文件 | |
<leader>fl | 文件位置 | 在文件管理器中定位 |
<leader>fR | 重命名文件 |
6.2 搜索和导航
| 快捷键 | 功能 |
|---|---|
<leader>sg | Grep搜索 |
<leader>sw | 搜索当前词 |
<leader>sW | 搜索当前词(精确) |
<leader>sb | 缓冲区搜索 |
<leader>sc | 命令搜索 |
<leader>sC | 命令历史 |
<leader>sh | 帮助标签 |
<leader>sH | 高亮组 |
<leader>sk | 按键映射 |
<leader>sM | man页面 |
<leader>sm | 跳转标记 |
<leader>so | 选项 |
<leader>sR | 恢复 |
<leader>sq | 快速修复 |
6.3 LSP功能
| 快捷键 | 功能 |
|---|---|
gd | 跳转到定义 |
gr | 查找引用 |
gI | 跳转到实现 |
gy | 跳转到类型定义 |
gD | 跳转到声明 |
K | 悬停信息 |
gK | 签名帮助 |
<c-k> | 签名帮助(插入模式) |
<leader>ca | 代码操作 |
<leader>cA | 源代码操作 |
<leader>cr | 重命名 |
6.4 诊断
| 快捷键 | 功能 |
|---|---|
<leader>cd | 行诊断 |
<leader>cD | 工作区诊断 |
]d | 下一个诊断 |
[d | 上一个诊断 |
]e | 下一个错误 |
[e | 上一个错误 |
]w | 下一个警告 |
[w | 上一个警告 |
6.5 UI控制
| 快捷键 | 功能 |
|---|---|
<leader>uf | 切换格式化 |
<leader>uF | 切换全局格式化 |
<leader>us | 切换拼写检查 |
<leader>uw | 切换自动换行 |
<leader>uL | 切换相对行号 |
<leader>ul | 切换行号 |
<leader>ud | 切换诊断 |
<leader>uc | 切换并发 |
<leader>uh | 切换内联提示 |
<leader>uT | 切换树形视图 |
0x07 配置文件结构解读
7.1 主配置文件(lazy.lua)
require("lazy").setup({
spec = {
-- 导入LazyVim核心
{
"LazyVim/LazyVim",
import = "lazyvim.plugins",
opts = {
colorscheme = "solarized-oaska",
},
},
-- 导入额外功能
{ import = "lazyvim.plugins.extras.linting.eslint" },
{ import = "lazyvim.plugins.extras.formatting.prettier" },
{ import = "lazyvim.plugins.extras.lang.json" },
{ import = "lazyvim.plugins.extras.lang.typescript" },
-- 导入自定义插件
{ import = "plugins" },
},
})配置说明:
colorscheme:设置主题为solarized-oaskaextras:添加 ESLint、Prettier、JSON、TypeScript支持plugins:导入自定义插件配置
7.2 主题配置(colorscheme.lua)
{
"craftzdog/solarized-oaska.nvim",
opts = function()
return {
transparent = true, -- 启用透明背景
}
ends,
}7.3 语法解析器配置(treesitter.lua)
opts.ensure_installed = opts.ensure_installed or {}
vim.list_extend(opts.ensure_installed, {
"markdown", "markdown_inline", "html", "css",
"javascript", "typescript", "json", "yaml",
"bash", "lua", "vim", "vimdoc",
})功能特性:
- 增量选择:
C-space扩大选择,<bs>缩小选择; - 文本对象:
af/if函数,ac/ic类,ab/ib块; - 导航:
]f/[f下/上一个函数,]c/[c下/上一个类;
0x08 Markdown专项配置
8.1 语法配置(options.lua中的Markdown部分)
vim.opt.conceallevel = 0 -- 全局不隐藏语法元素
-- Markdown文件特殊设置
vim.api.nvim_create_autocmd("FileType", {
pattern = { "markdown", "md" },
callback = function()
vim.opt_local.conceallevel = 0 -- 确保代码块标记可见
vim.opt_local.syntax = "on" -- 启用语法高亮
vim.opt_local.wrap = true -- 启用自动换行
vim.opt_local.linebreak = true -- 在单词边界换行
end,
})8.2 代码块高亮配置
vim.api.nvim_create_autocmd("ColorScheme", {
callback = function()
vim.api.nvim_set_hl(0, "markdownCodeDelimiter", { fg = "#61AFEF", bold = true })
vim.api.nvim_set_hl(0, "markdownCode", { bg = "#2D3748", fg = "#E2E8F0" })
vim.api.nvim_set_hl(0, "markdownCodeBlock", { bg = "#1A202C", fg = "#CBD5E0" })
vim.api.nvim_set_hl(0, "markdownCodeFence", { fg = "#98C379", bold = true })
end,
})0x09 常用操作流程
9.1 新项开发流程
- 打开项目:
<space>ff找到项目文件 - 文件导航:
<space>fr查看最近文件 - 全局搜索:
<space>fg搜索关键词 - 符号导航:
<space>cs查看文件结构 - 代码操作:
<space>ca查看可用操作
9.2 Markdown写作流程
- 新建文件:
te filename.md - 开启预览:
<space>pp - 表格模式:
<space>tm(需要时) - 代码注释:
<space>cc(需要时) - 保存格式化:
<space>cf
9.3 代码编辑流程
- 智能删除:
<space>d删除且不覆盖剪贴板 - 智能编辑:
<space>c删除并进入插入模式 - 智能粘贴:
<space>p粘贴复制内容 - 符号配对:自动配对,
<Tab>跳出 - 代码重构:
<space>cr重命名,<space>ca代码操作