vim -d可一键启动双栏可视化比对,脚本需准确指定部署前后文件路径、规避权限编码干扰,并支持-n -i NONE -u NONE参数禁用干扰项。

直接用 Vim 的 :Diff 命令无法自动比对部署前后的配置文件,但通过 Shell 脚本封装 + Vim 的 -d 参数,可以一键生成可视化的双栏差异视图——关键是让脚本准确识别“部署前”和“部署后”的目标文件,并规避权限、路径、编码等常见干扰。
准备两个可比对的配置快照
确保你有两份语义一致、格式规范的配置文件:
- 部署前:如
/etc/nginx/nginx.conf.pre-deploy(建议在部署前用cp或rsync --checksum备份) - 部署后:如
/etc/nginx/nginx.conf(当前生效版本) - 注意:两者需为相同编码(推荐 UTF-8),无 BOM;若含注释或空行差异大,可先用
grep -v '^#' | grep -v '^$'简化比对(慎用于生产环境)
写一个轻量级比对脚本
保存为 cfg-diff.sh,赋予执行权限(chmod +x cfg-diff.sh):
#!/bin/bash # 用法:./cfg-diff.sh /path/to/before.conf /path/to/after.conf if [ $# -ne 2 ]; then echo "用法:$0 <部署前文件> <部署后文件>" exit 1 fi <p>BEFORE="$1" AFTER="$2"</p><p>if [ ! -f "$BEFORE" ] || [ ! -f "$AFTER" ]; then echo "错误:文件不存在" exit 1 fi</p><h1>启动 vimdiff,禁用 swap 文件避免干扰</h1><p>vim -d -n -i NONE "$BEFORE" "$AFTER"
该脚本不依赖外部工具,仅调用系统 vim(需已安装 vim-enhanced 或支持 +diff 特性的 vim)。
增强实用性的小技巧
-
跳过 vim 启动屏:加
-u NONE参数(如vim -d -n -i NONE -u NONE),避免 .vimrc 干扰比对逻辑 -
高亮行尾空格:启动后在 vim 中输入
:set list,配合listchars=trail:·可发现隐藏空白差异 -
导出纯文本差异:退出 vimdiff 后,用
diff -u "$BEFORE" "$AFTER" > diff.patch补充生成可存档的 patch 文件 -
批量比对多个配置:用循环封装,例如遍历
/etc/myapp/conf.d/*.conf,逐个与对应.pre-deploy文件比对
注意事项与常见问题
Vim-Diff 是交互式工具,不是“生成图片”的可视化工具——它输出的是终端内的高亮双栏界面。若你需要导出 PNG/SVG 差异图:
- 终端截图(如使用 tmux + scrot)是最快方案
- 真正自动化出图需借助
vim --not-a-term --headless+ 插件(如vim-diff2html),但复杂度陡增,通常不必要 - 权限问题:脚本需有读取两个文件的权限;若比对
/etc/下文件,建议用sudo ./cfg-diff.sh ...,而非在脚本里硬加 sudo


















