From 93148248d573e47117ebfaf8a2d541eeb71ed80c Mon Sep 17 00:00:00 2001 From: xfy Date: Thu, 28 May 2026 17:22:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=20README=20=E5=85=A8=E9=9D=A2?= =?UTF-8?q?=E7=BF=BB=E8=AF=91=E4=B8=BA=E4=B8=AD=E6=96=87=E5=B9=B6=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E6=96=87=E6=A1=A3=EF=BC=8C=E4=BF=AE=E5=A4=8D=20ss=20=E6=9B=BF=E6=8D=A2=E6=98=A0=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - README.md:完整中文化,补充所有键位映射分类(文件查找、Git、 LSP、Buffer、窗口、终端等),更新文件结构说明,添加开发验证命令 - lua/keymaps.lua:修复 ss 映射,移除 <> 中多余的 < > 包围,使替换功能正常工作 Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 186 ++++++++++++++++++++++++++++++++++++------------ lua/keymaps.lua | 7 +- 2 files changed, 142 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index ec57e24..ea4756e 100644 --- a/README.md +++ b/README.md @@ -1,62 +1,158 @@ -# Neovim Config +# Neovim 配置 -Personal Neovim configuration for **0.12+**. +个人 Neovim 配置,目标版本 **0.12+**。 -## Highlights +## 核心特性 -- **Built-in plugin manager** — `vim.pack` (Neovim 0.12+), no lazy.nvim/packer -- **Custom lazy-loading** — `lua/lazy.lua` (~35 lines), defers heavy modules via `on_event`/`on_keys`/`load` -- **mini.nvim monorepo** — starter, pick, files, icons, notify, cmdline, completion, snippets, diff, surround -- **LSP + Formatting** — nvim-lspconfig + mason + conform.nvim, format-on-save -- **Fast startup** — disables ~20 built-in plugins, clipboard deferred via `vim.schedule()` -- **Startup dashboard** — ASCII logo + live module count + startup timing +- **内置插件管理器** — `vim.pack`(Neovim 0.12+),无需 lazy.nvim / packer +- **自定义懒加载框架** — `lua/lazy.lua`(约 35 行),通过 `on_event` / `on_keys` / `load` 延迟加载重型模块 +- **mini.nvim 单体插件集** — starter、pick、extra、files、icons、notify、cmdline、completion、snippets、diff、surround +- **LSP + 代码格式化** — nvim-lspconfig + mason + conform.nvim,保存时自动格式化 +- **快速启动** — 禁用约 20 个内置插件,剪贴板通过 `vim.schedule()` 延迟初始化 +- **启动仪表盘** — ASCII Logo + 实时模块加载统计 + 启动耗时 -## Lazy Loading +## 懒加载策略 -| Trigger | Plugins | +| 触发条件 | 插件 | |---------------|--------------------------------------| -| `VimEnter` | treesitter, lsp, icons | -| `InsertEnter` | completion, snippets | -| `BufReadPost` | diff, surround | +| `VimEnter` | treesitter、lsp、icons | +| `InsertEnter` | completion、snippets | +| `BufReadPost` | diff、surround | | `BufWritePre` | conform | -| Key press | pick, files, fugitive, grugfar | +| 按键触发 | pick、files、fugitive、grugfar | -## Keymaps (Leader = Space) +## 键位映射(Leader = 空格) -| Key | Action | -|---------------|---------------------------------| -| `ff` | Find files | -| `fw` | Live grep | -| `` | Buffer picker | -| `-` / `-` | File browser (cwd / current) | -| `gg` | Fugitive git | -| `sr` | Search & replace (grug-far) | -| `fm` | Format buffer | -| `gd` / `gh` | Go to definition / hover | -| `]d` / `[d` | Next / prev diagnostic | -| `u` | Undotree | +### 文件查找(mini.pick) -## Commands +| 键位 | 动作 | +|----------------|-----------------------------------| +| `ff` | 查找文件 | +| `fw` | 实时 grep(项目中搜索文本) | +| `fa` | 查找所有文件(含隐藏和忽略) | +| `fh` | 搜索帮助标签 | +| `fo` | 最近打开的文件 | +| `fz` | 当前缓冲区行内搜索 | +| `sk` | 搜索键位映射 | +| `` | Buffer 列表(支持 `` 删除) | +| `ft` | 切换文件类型 | + +### 文件浏览器(mini.files) + +| 键位 | 动作 | +|------|---------------------------------------| +| `-` | 在当前文件所在目录打开文件浏览器 | +| `_` | 在项目根目录(git root)打开文件浏览器 | + +### Git + +| 键位 | 动作 | +|----------------|--------------------------| +| `gg` | Fugitive(全屏新标签页) | +| `gd` | Git diff 垂直分割 | +| `ghp` | 预览当前 hunk | +| `ghb` | Blame 当前行 | +| `gB` | Blame 整个文件 | +| `gD` | 查看文件 Git 历史 | +| `sr` | 搜索并替换(grug-far) | + +### LSP 与诊断 + +| 键位 | 动作 | +|--------------|------------------------| +| `gd` | 跳转到定义 | +| `gh` | 悬停查看文档 | +| `ca` | 代码操作 | +| `fm` | 格式化当前 Buffer | +| `df` | 显示行诊断浮动窗口 | +| `ds` | 诊断位置列表 | +| `]d` / `[d` | 下一个 / 上一个诊断 | +| `]e` / `[e` | 下一个 / 上一个错误 | +| `]w` / `[w` | 下一个 / 上一个警告 | + +### Buffer 管理 + +| 键位 | 动作 | +|--------------|--------------------| +| `x` | 关闭当前 Buffer | +| `bn` | 新建 Buffer | +| `bo` | 关闭其他 Buffer | + +### 编辑与搜索 + +| 键位 | 动作 | +|--------------|----------------------------| +| `ss` | 全局替换光标下的单词 | +| `u` | 打开内置撤销树 | +| `` | 清除搜索高亮 | +| `J` | 合并行且不移动光标 | + +### 窗口与标签 + +| 键位 | 动作 | +|--------------|--------------------| +| `` | 窗口间快速跳转 | +| `tc` | 关闭当前标签页 | +| `tn` | 新建标签页 | +| `]` | 下一个标签页 | +| `[` | 上一个标签页 | + +### 终端 + +| 键位 | 动作 | +|--------------|----------------------------| +| `tt` | 打开新终端 | +| `` | 从终端模式返回普通模式 | + +### 文件操作 + +| 键位 | 动作 | +|--------------|----------------------------| +| `` | 保存文件 | +| `` | 复制整个文件内容到剪贴板 | +| `yp` | 复制相对文件路径 | +| `yP` | 复制绝对文件路径 | + +## 命令 ```vim -:PackAdd user/repo " Add a plugin -:PackDel plugin-name " Delete a plugin -:PackUpdate [name] " Update all or specific plugin +:PackAdd user/repo " 添加插件 +:PackDel plugin-name " 删除插件 +:PackUpdate [name] " 更新全部或指定插件 ``` -## Structure +## 文件结构 ``` -init.lua -- Entry point, disable built-ins -lua/options.lua -- Global options -lua/keymaps.lua -- Keymaps -lua/autocmds.lua -- Autocmds -lua/usercmds.lua -- :PackAdd / :PackDel / :PackUpdate -lua/pack.lua -- Plugin declarations + lazy bindings -lua/lsp.lua -- LSP + conform formatting -lua/treesitter.lua -- Deferred parser install -lua/lazy.lua -- Custom lazy-loading primitives -lua/pick.lua -- mini.pick wrappers -lua/git.lua -- Git utilities -nvim-pack-lock.json -- Lock file +init.lua -- 入口:禁用内置插件,加载核心模块 +lua/options.lua -- 全局选项 +lua/keymaps.lua -- 键位映射 +lua/autocmds.lua -- 自动命令 +lua/usercmds.lua -- :PackAdd / :PackDel / :PackUpdate +lua/pack.lua -- 插件声明 + 懒加载绑定 +lua/lazy.lua -- 自定义懒加载原语(load / on_event / on_keys) +lua/plugins/ + lsp.lua -- LSP + conform 格式化 + treesitter.lua -- 语法树:延迟安装 parser、按 buffer 启用高亮 + pick.lua -- mini.pick 封装:buffer picker、filetype picker + git.lua -- Git 工具:hunk 预览、blame、文件历史 +nvim-pack-lock.json -- 插件锁定文件 +colors/ + catppuccin-*.lua -- Catppuccin 配色方案(mocha 为默认) +``` + +## 开发 / 验证 + +```bash +# 检查 init.lua 语法 +nvim --headless -c 'lua dofile("init.lua")' -c 'qa!' + +# 检查特定模块 +nvim --headless -c 'lua require("pack")' -c 'qa!' + +# 健康检查 +nvim --headless -c 'checkhealth' -c 'qa!' + +# 测量启动时间 +nvim --startuptime /tmp/startup.log +q ``` diff --git a/lua/keymaps.lua b/lua/keymaps.lua index 0c749db..791a330 100644 --- a/lua/keymaps.lua +++ b/lua/keymaps.lua @@ -48,12 +48,7 @@ map("n", "J", "mzJ`z", { desc = "合并行且不移动光标" }) -- 快速替换当前光标下的单词(全局替换)。 -- 在命令行插入光标下的单词。 -- 映射展开后形如 :%s/oldword/oldword/gI,光标停在末尾,可修改替换内容。 -map( - "n", - "ss", - [[:%s/<>/<>/gI]], - { desc = "全局替换光标下的单词" } -) +map("n", "ss", [[:%s///gI]], { desc = "全局替换光标下的单词" }) -- Visual 模式下在选区范围内搜索替换 -- \%V 是 Vim 正则中的可视区域限定符,确保替换只在选区内生效