Git 提交弹出 Vim 无法退出,本质是 core.editor 配置未生效或路径/参数错误;Git 按 GIT_EDITOR → core.editor → VISUAL → EDITOR 顺序选择编辑器,环境变量干扰或引号缺失(如含空格路径未用单引号包裹)均会导致 fallback 至 Vim。

Git 提交时弹出 Vim、卡在编辑器里退出不了,本质不是 Git 问题,而是 core.editor 配置没生效或路径/参数写错了。最稳妥的方式是用 git config --global core.editor 显式指定,优先级高于环境变量,也避免跨平台歧义。
为什么 git commit 还是打开 Vim?
Git 按顺序检查四个来源决定用哪个编辑器:GIT_EDITOR 环境变量 → core.editor 配置 → VISUAL 环境变量 → EDITOR 环境变量。如果你只设了 EDITOR 但没设 VISUAL,某些 Git 版本(尤其是 Windows 上的 Git for Windows)会跳过它,直接 fallback 到内置默认(Vim)。另外,core.editor 值如果含空格但没用单引号包裹可执行路径,也会静默失败。
- 运行
git config --global core.editor查看当前值,为空说明没配成功 - 运行
echo $VISUAL和echo $EDITOR(Linux/macOS)或echo %VISUAL%(Windows)确认环境变量是否干扰 - Git 2.39+ 在 Windows 上对带空格路径更敏感,必须用
"'C:/Program Files/.../app.exe'"这种双引号套单引号写法
core.editor 的正确写法(按编辑器分)
所有命令都加 --global,写入 ~/.gitconfig,影响全部仓库。注意末尾参数不是可选的——缺了 --wait 或 -multiInst,编辑器可能闪退或不阻塞 Git 进程,导致提交被中止。
适用于以下场景:(1)用户提供 GitHub 仓库 URL 或本地仓库路径,并请求将其转换为其他格式;(2)用户请求导出 GitHub 仓库……
- VS Code:
git config --global core.editor "code --wait"(需先在 VS Code 中通过Ctrl+Shift+P运行Shell Command: Install 'code' command in PATH) - Notepad++(Windows):
git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin" - Sublime Text(macOS):
git config --global core.editor "/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl --new-window --wait" - Nano(Linux/macOS):
git config --global core.editor "nano -w"
测试配置是否真生效
别靠 git commit 直接试——万一又进 Vim,还得按 :wq 出来。用更轻量的方式验证:
- 运行
git commit --amend --no-edit:这会触发编辑器打开,但不修改提交内容,适合快速确认 - 运行
git config --get core.editor,输出应为完整字符串,不含乱码或截断 - 删掉
.git/COMMIT_EDITMSG文件后重试git commit,排除缓存干扰
最容易被忽略的是:Windows 上 Notepad++ 路径里的 (x86) 和空格处理,Linux/macOS 上 --wait 缺失导致编辑器秒退,以及 VS Code 没运行 shell command 安装步骤——这三处出错,配置就等于白设。

















