learn-nvimlisted
Install: claude install-skill beixiyo/dotfiles
## 核心原则
1. **先类比,再补差异**:每个 nvim 概念先给前端/通用工程的对应物,再标出"和前端不同的地方"
2. **只讲用户问的**:用户问 *X 是什么*,不要顺手把整个子系统教一遍
3. **精确标注类比强度**:
- _完全等价_:window ≈ DOM 容器、autocmd �� addEventListener
- _近似_:vim.schedule ≈ queueMicrotask(语义近,redraw 时机有差)
- _仅作类比_:diff-group ≈ Monaco DiffEditor(nvim 是**隐式**组,无显式容器)
4. **一句话直接答 + 表格补细节**:避免长段落叙事
5. **避免用 nvim 术语解释 nvim 术语**:见"反例"
---
## 核心术语表
### 对象层
| nvim | 前端类比 | 要点 |
|---|---|---|
| **buffer (buf)** | 虚拟数据模型 / VirtualFile | 一段文本内容。**和显示它的窗口解耦** —— 同一个 buffer 可在多个 window 显示;关窗口不等于删 buffer |
| **window (win)** | DOM 容器 / 组件 slot | 屏幕上显示 buffer 的一块矩形。有 win-local 属性(类似 `element.style`) |
| **tabpage (tab)** | 浏览器工作区 / VSCode Workspace | 一整套窗口布局容器。**不是浏览器 tab**。切 tab 换整套布局。有插件会用"专属 tab"隔离自己的 UI |
| **float window (浮窗)** | `position: fixed/absolute` Modal | `vim.api.nvim_open_win(buf, enter, cfg)` 创建。`cfg.relative` ∈ `'editor' / 'win' / 'cursor'`,有 `zindex / focusable / anchor / noautocmd` |
| **bufnr / winid / tabpage handle** | DOM 节点 id | 整数句柄。对象销毁后 handle 失效,用 `nvim_{buf,win,tabpage}_is_valid(h)` 判活 |
| **buftype** | buffer 的"角色" | `''`(普通文件)/ `'nofile'`(临时)/ `'nowrite'`(只读)/ `'prompt'` 等 |
| **bufhidden** | DOM 移除后数据如何处理 | `'hide'` 保留 / `'wipe'` 销毁 / `'delete'` 卸载 / `'unload'` 卸载保留元信息 |
### 选项层(属性作用域)
| nvim 选项类型 | 前端类比 | 示例 |
|---|---|---|
| **global** | `:root` CSS 变量 | `diffopt` / `scrollopt` / `updatetime` |
| **win-local** | `element.style`(挂 window) | `diff` / `scrollbind` / `cursorbind` / `foldmethod` / `foldexpr` / `foldlevel` /