用 chezmoi 管理 Windows 和 macOS 的 Neovim 配置。日常先修改实际使用的 nvim 配置,再复制回源仓库,最后通过 GitHub 同步。
源仓库默认位于 ~/.local/share/chezmoi,可用 chezmoi source-path 确认。
| 位置 | 职责 |
|---|---|
Windows:%LOCALAPPDATA%/nvim |
Windows 实际使用、日常编辑的配置 |
macOS:~/.config/nvim |
macOS 实际使用、日常编辑的配置 |
.chezmoitemplates/nvim/ |
共享配置正文,不需要 .tmpl 后缀 |
AppData/Local/nvim/ |
Windows 部署路径及模板引用 |
dot_config/nvim/ |
macOS 部署路径及模板引用 |
.chezmoiscripts/ |
apply 后执行的现有平台复制脚本 |
.chezmoiignore |
平台选择及忽略项 |
两端 .tmpl 引用同一份共享正文,例如:
{{- template "nvim/lua/config/keymaps.lua" . -}}
路径相对于 .chezmoitemplates/;template 是单数,. 传入当前模板上下文。仅添加 .tmpl 后缀不会自动引用共享内容。
.neoconf.json、.gitignore 和 .keep 等以点开头的文件不能按普通命名模板直接引用,使用 include 读取共享文件正文,例如 {{- include ".chezmoitemplates/nvim/.neoconf.json" -}}。空文件继续保留平台源文件的 empty_ 属性。
实际 nvim 配置
→ 手动复制到 .chezmoitemplates/nvim
→ git add / commit / push
→ 另一台机器 chezmoi update
→ 按该系统的引用文件渲染到实际 nvim 目录
apply 的方向是源仓库到实际配置;回收本地修改必须在 apply 之前完成。
-
在实际 nvim 目录修改、使用并确认配置。
-
将改动按相对路径复制到
.chezmoitemplates/nvim/,保留平台目录中的引用文件。 -
用
chezmoi diff --exclude=scripts检查渲染结果;已回收的文件应与本机一致。用chezmoi git diff审阅仓库改动。 -
提交并推送:
chezmoi git add .chezmoitemplates/nvim chezmoi git -- commit -m "Sync nvim configuration" chezmoi git push -
在另一台已有此仓库的设备执行
chezmoi update。该设备若也有尚未回收的修改,应先回收并提交,再拉取。
Windows 复制全部当前配置的例子(包含子目录,不传播删除):
$nvimSource = Join-Path $env:LOCALAPPDATA 'nvim'
$chezmoiSource = (chezmoi source-path).Trim()
$nvimShared = Join-Path $chezmoiSource '.chezmoitemplates/nvim'
robocopy $nvimSource $nvimShared /E
if ($LASTEXITCODE -ge 8) { throw '复制 nvim 配置失败' }当前共享正文不使用按机器渲染的 Go 模板条件。以后若引入此类条件,回收时须合并改动,不能用单台机器的渲染结果覆盖模板逻辑。
新增文件时,把正文复制到共享目录,并在两端各添加对应的 .tmpl 引用。例如,两端的 lua/plugins/example.lua.tmpl 均引用 nvim/lua/plugins/example.lua。同时提交正文、两端引用和相关忽略规则。
也可沿用旧流程:先补当前平台引用,预览后执行 chezmoi apply,让现有后置脚本复制到另一平台目录。两端引用都已补齐时,本机无需仅为上传而执行 apply。
删除文件时,同时移除共享正文和两端引用。现有 robocopy /E、rsync -a 不会删除目标目录中的旧文件,须显式处理旧副本。从仓库移除引用或执行 chezmoi forget 只是停止管理;如果需要同步删除另一台设备上的旧文件,应为确定要删除的配置添加 .chezmoiremove 路径规则,并先检查差异。
| 平台 | apply 之后的动作 |
|---|---|
| Windows | robocopy /E 将 Windows 源目录复制到 macOS 源目录,再将实际 nvim 配置复制到共享目录 |
| macOS | rsync -a 将 macOS 源目录复制到 Windows 源目录,再将实际 nvim 配置复制到共享目录 |
脚本只复制本机文件,不做 Git 提交或推送。chezmoi update 包含 apply,也会触发脚本,接收更新后仍可能出现源仓库改动。脚本执行时配置部署已经完成,不能代替事先回收本地修改。
现有平台规则保持不变:
- Windows 忽略
.config/,macOS 忽略AppData/。 - macOS 不部署
lazy-lock.json和lazyvim.json。macOS 后置脚本仍会把本机这两个文件复制到共享目录,提交时需检查,避免无意改动共享版本。 - Windows 忽略
.gitignore;macOS 的 nvim.gitignore是显式例外。 - 当前 VimTeX 共享配置使用 Windows 的 SumatraPDF。macOS 使用前需要按本机查看器调整;共用模板不会自动解决平台差异。
chezmoi add:把实际配置收进源仓库;--template是单数。chezmoi re-add:回收已管理的普通文件,跳过模板。本仓库应按上述复制流程回收。chezmoi edit:编辑源文件;本仓库源文件多为引用,修改正文可直接编辑共享目录中的文件。chezmoi apply:将源仓库渲染到实际配置,不会上传 GitHub。chezmoi update:拉取远端并应用配置。chezmoi cd:打开位于源目录的 shell;exit退出该 shell,不是编辑命令。chezmoi cat-config/chezmoi edit-config:查看、编辑 chezmoi 自身配置,不是 nvim 内容。