nvim/README.md

173 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Neovim 配置
基于 Neovim 0.12+lazy.nvim 管理插件,支持原生和 VSCode Neovim 双模式。
## 目录结构
```
init.lua # 入口:安装 lazy.nvim → keymaps → 分支判断
lua/
G.lua # 全局工具单例vim API 别名 + 映射/命令/自动命令封装)
keymap.lua # 基础快捷键
options.lua # vim.opt 基础设置
vsc.lua # VSCode Neovim 模式下的精简启动(仅编辑插件)
plugs.lua # 插件聚合器10 个模块)
plugs/
nvim-lspconfig.lua # LSP 核心7 个 server 注册 + LSP 快捷键
mason.lua # LSP server 自动安装Mason
nvim-cmp.lua # 补全引擎nvim-cmp + vsnip + lspkind + 命令行补全)
treesitter.lua # 语法高亮 + 自动安装 parser
symbols-outline.lua # 代码大纲侧边栏
winbar.lua # 顶部文件路径 + 函数标签
nvimtree.lua # 文件树
theme.lua # 主题tokyonight+ 状态栏lualine+ 标签栏tabline
edit-plugs.lua # 编辑增强fzf/surround/wildfire/多光标/对齐/Copilot/折叠/hop
dev.lua # 开发工具colorizer/go.nvim/conda/toggleterm
lsp/
lua.lua # Lua LSPLuaJIT + 全局变量声明)
c.lua # C/C++ LSPclangd+ :R 编译运行
bash.lua # Bash LSP + :R 运行
go.lua # Go LSPgopls+ :R / :Rgin 运行
basedpyright.lua # Python LSPbasedpyright+ :R 运行
yaml.lua # YAML LSP + GitHub Workflow schema
json.lua # JSON LSP
snippets/ # 代码片段C/Go/JSON/Lua
```
## 启动流程
```
G.lua → 克隆/定位 lazy.nvim → keymap.lua →
若 VSCode 环境 → vsc.lua仅编辑插件
若原生 Neovim → options.lua → lazy.setup(plugs.lua)
```
## 插件总表(~28 个)
| 分类 | 插件 | 用途 |
|------|------|------|
| LSP | nvim-lspconfig | LSP 客户端配置 |
| LSP | Mason + mason-lspconfig | LSP server 自动下载 |
| LSP | lua_ls, clangd, bashls, gopls, basedpyright, yamlls, jsonls | 7 种语言 LSP |
| 补全 | nvim-cmp + cmp-nvim-lsp + cmp-buffer + cmp-path + cmp-cmdline | 补全引擎 |
| 补全 | vim-vsnip + cmp-vsnip | 代码片段引擎 |
| 补全 | lspkind-nvim | 补全图标 |
| 语法 | nvim-treesitter | 语法高亮 + 缩进检测 |
| 语法 | nvim-autopairs | 自动括号配对 |
| 语法 | nvim-hlchunk | 括号层级和缩进色块 |
| 主题 | tokyonight.nvim | 配色方案 |
| UI | lualine.nvim | 状态栏 |
| UI | tabline.nvim | 顶部标签栏 |
| UI | winbar.nvim | 顶部文件名 + 函数路径 |
| UI | nvim-tree.lua | 侧边文件树 |
| UI | symbols-outline.nvim | 代码大纲 |
| UI | colorizer | 颜色值可视化 |
| 编辑 | nvim-fzf | 模糊搜索 |
| 编辑 | vim-surround | 环绕字符操作cs/ds/ys |
| 编辑 | wildfire.vim | 选区自动扩大/缩小 |
| 编辑 | vim-multiple-cursors | 多光标编辑 |
| 编辑 | vim-easy-align | 对齐排版 |
| 编辑 | hop.nvim | 快速跳转(替代 f/F/t/T |
| 编辑 | nvim-ufo | 现代折叠treesitter 驱动) |
| AI | copilot.vim | GitHub Copilot 行内补全 |
| 语言 | go.nvim | Go 开发增强test/coverage 等) |
| 语言 | nvim-conda | Conda 环境切换 |
| 终端 | toggleterm.nvim | 浮层终端 |
## 快捷键速查
### 基础操作
| 键 | 模式 | 功能 |
|----|------|------|
| `<leader>nh` | n | 清除搜索高亮 |
| `<leader>rp` | n | 全局替换 `:%s/` |
| `<leader>y` / `p` / `v` | n | 全文件复制/粘贴/全选 |
| `<A-h>` / `<A-l>` | n | 切换左右标签页 |
| `<c-j/h/k/l>` | n | 窗口间跳转 |
| `<c-c>` / `<c-q>` | n | 关闭窗口 / 强制关闭 |
| `<c-S>` | n | sudo 强制保存 |
| `<cs-y>` | v | 复制到系统剪切板 |
| `<c-e>` | n | 文件树开关 |
| `<cs-o>` | n | 代码大纲开关 |
| `<c-t>` | n/i | 终端开关 |
| `<C-i>` | n | Reasonix AI自适应分屏横屏→下方竖屏→右侧 |
| `<up/down/left/right>` | n | 调整窗口大小 |
### LSP
| 键 | 模式 | 功能 |
|----|------|------|
| `gd` | n | 跳转到定义 |
| `gh` | n | 悬浮文档 |
| `gD` | n | 跳转到声明 |
| `gi` | n | 跳转到实现 |
| `gr` | n | 查找引用 |
| `<cs-r>` | n | 重命名符号 |
| `<cs-i>` | n | 代码格式化 |
### 语言运行 `:R`
| 语言 | 命令 |
|------|------|
| C/C++ | 编译 → 运行 → 删二进制 |
| Bash | `sh %` |
| Go | `go run %``:Rgin` 运行 `main.go` |
| Python | `python3 %` |
### 补全(插入模式)
| 键 | 功能 |
|----|------|
| `<C-n>` / `<C-p>` | 选择补全项 / snippet 占位跳转 |
| `<CR>`(未选择时) | 换行 |
| `<CR>`(选择后) | 确认补全 |
| `Tab` | Copilot 接受建议 |
### 命令栏 / 搜索栏补全
| 键 | 功能 |
|----|------|
| `Tab` / `S-Tab` | 选择补全项 |
| `<CR>`(未选择时) | 直接执行命令/搜索 |
| `<CR>`(选择后) | 确认补全 |
### 编辑
| 键 | 模式 | 功能 |
|----|------|------|
| `f` / `F` / `t` / `T` | n | hop 行内跳转(覆盖原生) |
| `<c-f>` | n | hop 双字符跳转 |
| `ga` / `=` | v | EasyAlign 对齐 |
| `gc` / `gcc` | n | 注释切换Neovim 0.12 内置) |
| `zc` / `zo` / `za` / `zR` | n | 折叠ufo |
### 文件树内
| 键 | 功能 |
|----|------|
| `v` | 垂直分屏打开 |
| `s` | 水平分屏打开 |
## LSP 说明
- 使用 Neovim 0.11+ 新 API`vim.lsp.config` / `vim.lsp.enable`
- `capabilities``cmp_nvim_lsp` 统一在 `nvim-lspconfig.lua` 注入,各语言文件不重复 require
- `basedpyright` 替代了 `pyright`(类型检查更强)
- Mason 自动安装bashls、lua_ls、jsonls、yamllsbasedpyright 需手动装)
- Treesitter 关闭了 txt parser禁用了 Go恢复中由 go.nvim 处理)
## 安装
```bash
# 克隆到 Neovim 配置目录
git clone https://git.qyhhh.top/newbie/nvim.git ~/.config/nvim
# 首次启动会自动安装 lazy.nvim 及全部插件
nvim
```
## 许可
MIT