macOS下shell为何优先执行/usr/bin/vim而非homebrew安装的vim
问题原因
- 最高概率是Shell的命令哈希缓存导致:所有主流Shell(zsh/bash/fish等)都会缓存已经执行过的命令的绝对路径,省去每次执行命令都遍历PATH目录查找的开销。如果你在装Homebrew版Vim之前运行过系统自带的
/usr/bin/vim,缓存里就会一直把vim命令对应到/usr/bin/vim,不会主动更新,哪怕你PATH里把Homebrew路径放最前面也不会生效。 - 其次可能是PATH配置没有在当前会话生效:如果PATH配置写错了Shell配置文件,或者改完配置没重载,当前会话实际的PATH顺序可能和你以为的不一样,可以先跑
echo $PATH确认输出开头是不是/opt/homebrew/bin。 - 还有可能是存在旧的alias配置:如果之前在Shell配置里写过
alias vim=/usr/bin/vim这类别名,别名优先级比PATH查找高,会直接调用系统自带Vim。
解决步骤
按顺序排查操作即可:
- 先清Shell命令缓存,绝大多数情况这一步就能解决:
如果你用的是zsh/bash,执行:hash -r如果你用fish Shell,清缓存命令是
history -p;用tcsh的话执行rehash
清完跑which vim,如果输出/opt/homebrew/bin/vim就已经修复了。 - 如果清缓存没用,先查有没有错误的别名配置,执行:
alias vim
如果输出结果是vim=/usr/bin/vim,就打开对应的Shell配置文件(zsh对应~/.zshrc,bash对应~/.bash_profile/~/.bashrc),删掉对应的alias配置行,保存后执行source 你修改的配置文件路径重载配置即可。 - 如果还没解决,执行
echo $PATH确认当前生效的PATH顺序,如果输出开头没有/opt/homebrew/bin,说明PATH配置没加载对:- macOS从Catalina版本开始默认Shell是zsh,直接把下面这行写到
~/.zshrc文件末尾:export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:$PATH" - 保存后执行
source ~/.zshrc重载,再跑which vim确认路径即可。
- macOS从Catalina版本开始默认Shell是zsh,直接把下面这行写到
- 要是以上操作都不想折腾,最直接的兜底方案是在Shell配置文件里加一行强制别名:
alias vim="/opt/homebrew/bin/vim"
重载配置后不管缓存或者PATH顺序怎么变,都会直接调用Homebrew安装的Vim版本。

内容的提问来源于stack exchange,提问作者cserbo
相关产品推荐
相关产品推荐

