Logo Neo93
My NeoVim Configuration for macOS

My NeoVim Configuration for macOS

August 25, 2025
9 min read
Table of Contents

0x01 基础信息

  1. 主键:<Space>
  2. 配置路径:~/.config/nvim
  3. 插件管理器:lazy.nvim
  4. 基础框架:LazyVim
  5. 主题:solarized-oaska
  6. 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')
快捷键模式功能说明
xNormal删除字符(不复制)删除单个字符但不覆盖剪贴板

3.1.2 智能粘贴

-- 按下 空格+p:粘贴复制的内容
keymap.set("n", "<Leader>p", '"0p')   -- 在光标后面粘贴内容
keymap.set("n", "<Leader>P", '"0P')   -- 在光标前面粘贴内容
keymap.set("v", "<Leader>p", '"0p')   -- 在选中的内容后粘贴
快捷键模式功能说明
<space>pNormal/Visual粘贴复制的内容粘贴寄存器0的内容(最后复制的内容)
<space>PNormal/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>cNormal/Visual删除并进入插入模式删除内容不影响剪贴板
<space>CNormal/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>dNormal/Visual删除(不复制)删除内容但不覆盖剪贴板
<space>DNormal/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
配置项说明
encodingutf-8内部编码格式
fileencodingutf-8文件保存编码
numbertrue显示行号
titletrue显示窗口标题

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
配置项说明
autoindenttrue自动缩进
smartindenttrue智能缩进
expandtabtrue使用空格代替tab
shiftwidth2缩进宽度
tabstop2tab显示宽度
smarttabtrue智能tab处理

搜索和滚动

vim.opt.hlsearch = true
vim.opt.ignorecase = true
vim.opt.scrolloff = 10
vim.opt.inccommand = "split"
配置项说明
hlsearchtrue高亮搜索结果
ignorecasetrue搜索忽略大小写
scrolloff10滚动时保持的行数
inccommandsplit替换命令实时预览

4.4 窗口分割

vim.opt.splitbelow = true
vim.opt.splitright = true
vim.opt.splitkeep = "cursor"
配置项说明
splitbelowtrue水平分割时新窗口在下方
splitrighttrue垂直分割时新窗口在右方
splitkeepcursor分割时光标保持位置

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>sgGrep搜索
<leader>sw搜索当前词
<leader>sW搜索当前词(精确)
<leader>sb缓冲区搜索
<leader>sc命令搜索
<leader>sC命令历史
<leader>sh帮助标签
<leader>sH高亮组
<leader>sk按键映射
<leader>sMman页面
<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-oaska
  • extras:添加 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 新项开发流程

  1. 打开项目:<space>ff找到项目文件
  2. 文件导航:<space>fr查看最近文件
  3. 全局搜索:<space>fg搜索关键词
  4. 符号导航:<space>cs查看文件结构
  5. 代码操作:<space>ca查看可用操作

9.2 Markdown写作流程

  1. 新建文件:te filename.md
  2. 开启预览:<space>pp
  3. 表格模式:<space>tm(需要时)
  4. 代码注释:<space>cc(需要时)
  5. 保存格式化:<space>cf

9.3 代码编辑流程

  1. 智能删除:<space>d删除且不覆盖剪贴板
  2. 智能编辑:<space>c删除并进入插入模式
  3. 智能粘贴:<space>p粘贴复制内容
  4. 符号配对:自动配对,<Tab>跳出
  5. 代码重构:<space>cr重命名,<space>ca代码操作