git 默认用 vi 作编辑器,换 sublime text 需加 --wait 参数确保阻塞等待关闭文件;macos 用 git config --global core.editor "subl --wait",windows 各环境路径写法不同,且须先配置 subl 命令到 path。

Git 调用 git commit 或 git rebase -i 时,会打开一个编辑器让你输入提交信息或修改提交顺序——默认通常是 vi。想换成 Sublime Text,关键不是“装个插件”,而是让 Git 知道怎么**安全、阻塞、一次性**地启动它。
为什么直接设 subl 会失败?
Git 要求编辑器启动后**阻塞当前命令行进程**,直到你保存并关闭文件,Git 才继续读取编辑后的内容。但 macOS/Linux 下直接运行 subl 命令会立即返回(非阻塞),Git 就误以为你“没写完就关了”,直接用空提交信息 abort 掉操作。
解决办法是加 --wait 参数,强制 Sublime Text 在文件关闭前不退出进程:
- macOS:
git config --global core.editor "subl --wait" - Windows(命令行):
git config --global core.editor "'C:/Program Files/Sublime Text 3/subl.exe' --wait" - Windows(Git Bash):
git config --global core.editor "/c/Program Files/Sublime Text 3/subl.exe --wait"
subl 命令不存在?先建软链接或配置 PATH
Sublime Text 安装时不一定自动把 subl 加入系统 PATH。没这个命令,Git 就根本找不到编辑器。
验证方式:终端里敲 subl --version,报 command not found 就得手动配:
- macOS:打开 Sublime Text → 菜单栏 > Tools > Command Palette → 输入
Install Shell Commands并执行 - Windows:安装时勾选
Add to PATH;若已安装,重装并勾选,或手动把Sublime Text 3目录加进系统环境变量PATH
配完重启终端再试 subl --version,有输出才算成功。
Windows 上用 Git Bash 还是 cmd?路径写法完全不同
Git Bash 是类 Unix 环境,不认 Windows 的反斜杠和空格路径,也不走系统 PATH 的原始逻辑。直接粘贴 cmd 里的命令会报错:
error: cannot run C:/Program Files/Sublime Text 3/subl.exe: No such file or directory
必须转义空格,并用正斜杠 + Cygwin 风格路径:
- 正确写法:
git config --global core.editor "/c/Program\ Files/Sublime\ Text\ 3/subl.exe --wait" - 更稳妥的替代方案:把 Sublime 安装到无空格路径(如
C:st3),然后配成/c/st3/subl.exe --wait
改完还弹 vi?检查有没有被其他配置覆盖
Git 配置有层级:--system(全局) --global(用户) --local(当前仓库)。如果某项目里执行过 git config core.editor vim,那这个仓库就会无视全局设置。
排查命令:
git config --show-origin core.editor
它会告诉你 core.editor 是从哪一行配置文件、哪个作用域读出来的。常见干扰源:
-
~/.gitconfig里写了 editor,但拼错了参数(比如漏了--wait) - 项目根目录下
.git/config有本地 editor 设置 - 环境变量
GIT_EDITOR或EDITOR被设成了vi(优先级高于 config)
临时绕过环境变量测试:运行 GIT_EDITOR= git commit,看是否走你配的 Sublime。
最常被忽略的是 --wait 参数缺失,以及 Windows 下 Git Bash 对路径的特殊处理——这两点不解决,其他配置全白搭。











