Git commit 默认调用 vi 是因未配置 core.editor,应使用 git config --global core.editor 设置支持命令行阻塞模式的编辑器,如 VS Code 用 "code --wait",并注意路径格式、引号及参数正确性。

Git commit 时弹出 vi 而不是你想要的编辑器?
Git 默认用系统环境变量 $VISUAL 或 $EDITOR 指定的编辑器,没设就退到 vi。很多人装了 VS Code、Sublime 或 Notepad++,但 git commit 还是跳 vi,根本原因是 Git 没被明确告知用哪个程序,或者路径/参数写错了。
实操建议:
- 先确认你本地编辑器是否支持命令行调用(比如 VS Code 要装好 shell 命令
code) - 在终端运行
echo $EDITOR,看输出是不是空或指向vi - 别直接改系统级
$EDITOR环境变量——Git 有更稳定、更隔离的配置方式
用 git config --global core.editor 设置(推荐)
这是最干净、最可复现的方式,只影响 Git 行为,不干扰其他工具。不同编辑器命令差异大,参数错一个就白配:
- VS Code:
git config --global core.editor "code --wait"(--wait关键,否则 Git 不等你输完就提交) - Sublime Text(macOS):
git config --global core.editor "subl -n -w"(-w表示等待关闭) - Notepad++(Windows):
git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"(路径带空格必须加单引号,-multiInst防止卡死) - Mac 自带 TextEdit 不推荐:它不支持命令行阻塞模式,Git 会立刻提交空消息
Windows 上用 Git Bash 时编辑器打不开?
常见现象是执行 git commit 后卡住、无响应,或者弹出错误提示 error: unable to start editor 'xxx'。本质是 Git Bash 的路径解析和 Windows 原生命令不兼容:
- 别用 Windows 原生路径如
C:\Users\...\notepad++.exe,要转成 Git Bash 可识别的格式:/c/Users/.../notepad++.exe - 如果编辑器安装在 Program Files,且用了空格路径,单引号必须包住整个字符串,不能只包路径部分
- 某些杀毒软件会拦截 Git 启动外部程序,临时禁用试试;也可能是编辑器进程残留占端口(尤其 VS Code 多窗口时)
改完还是打开 vi?检查这三处
Git 编辑器配置有优先级:命令行参数 > 本地仓库 .git/config > 全局 ~/.gitconfig > 系统 /etc/gitconfig。你以为改了全局,其实本地仓库里有个更高优的旧配置:
- 进项目目录,运行
git config --local core.editor,看有没有输出——有就说明本地覆盖了全局 - 运行
git config --list --show-origin,能清楚看到每条配置来自哪个文件、哪一行 - 改完后别急着
git commit,先试git config --get core.editor确认值已生效
最常被忽略的是:编辑器启动后必须保存并关闭,Git 才读取内容;按 :q! 强制退出 vi,Git 就当没输入,直接中止提交。这不是配置问题,是操作惯性。










