Vim内执行Git命令提示非仓库,终端同命令正常,该从何排查?
排查Vim中执行git commit报错"not a git repository"的思路
遇到这种Vim里跑git命令报错但终端完全正常的情况,我通常会从以下几个方向逐一排查:
检查Vim当前的工作目录
Vim执行外部命令(!开头的命令)时,是在它的当前工作目录下运行的,这个目录不一定是你的项目根目录。你可以在Vim里输入:pwd查看当前路径,再和终端里执行pwd的结果对比。如果确实不在项目根目录,要么切换目录(:cd ~/myproject),要么在git命令里指定仓库路径::!git -C ~/myproject commit "/home/myproject/foo.bar" -m "lorem"甚至更省心的是用
%代表当前编辑的文件,避免手动写路径出错::!git commit % -m "lorem"对比Vim和终端的环境变量
有时候Vim启动时加载的环境变量和终端不一样,比如GIT_DIR或GIT_WORK_TREE被错误设置,会导致git找不到仓库。你可以分别在Vim和终端里执行以下命令对比输出:- Vim里:
:!echo $GIT_DIR和:!echo $GIT_WORK_TREE - 终端里:
echo $GIT_DIR和echo $GIT_WORK_TREE
如果Vim里有异常值,可能是你的shell配置文件(比如.bashrc/.zshrc)在非交互式模式下没有正确加载环境变量,或者vimrc里不小心修改了这些变量。
- Vim里:
确认Vim使用的Shell是否和终端一致
Vim默认的shell可能和你日常用的终端shell不同,比如终端用zsh但Vim默认用bash,而不同shell的配置差异可能导致环境不一致。你可以:- 在Vim里查当前shell:
:set shell? - 在终端里查当前shell:
echo $SHELL
如果不一致,可以在vimrc里设置成你常用的shell,比如:
set shell=/bin/zsh- 在Vim里查当前shell:
检查git命令的路径是否一致
Vim的PATH环境变量可能和终端不同,导致调用的git不是同一个版本或者不在正确路径下。你可以分别执行:- Vim里:
:!which git - 终端里:
which git
如果路径不一样,要么在Vim里用git的完整路径执行命令,要么调整Vim的PATH环境变量(可以在vimrc里用let $PATH = "/usr/bin:" . $PATH这类命令修改)。
- Vim里:
内容的提问来源于stack exchange,提问作者jjk
相关产品推荐
相关产品推荐

