如果你符合下面这些,基本就是环境变量的锅:
http_proxy / https_proxy / all_proxy 环境变量,指向一个旧端口/旧软件(比如老的 7890、某个已卸载的代理)。程序优先读这个变量去连,那个代理早没了 → 直接超时。按 Win+R 输入 cmd 回车,打开命令行,粘贴:
C:\> set | findstr /i proxy http_proxy=http://127.0.0.1:7890 # ← 有输出 = 中招了 https_proxy=http://127.0.0.1:7890
有输出(尤其端口不是你现在 Clash 的端口)就是它。PowerShell 里用 echo $env:http_proxy 也行。
按 Win+R 输入 sysdm.cpl → 「高级」→ 「环境变量」。在用户变量和系统变量两个框里,找到并删除下面这些(有几个删几个):
删完点确定,然后 把已经打开的终端 / VS Code / Docker 等全部关掉重开(甚至重启电脑最保险)——环境变量改了,旧窗口不会自动更新。
set | findstr /i proxy 应该没有任何输出,就干净了。这时靠 Clash 的 TUN 模式 / 系统代理 就能让终端和 App 走代理。打开「终端」(Terminal),粘贴:
$ env | grep -i proxy http_proxy=http://127.0.0.1:7890 # ← 有输出 = 中招了 https_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7891
$ unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY $ env | grep -i proxy # 没输出 = 当前终端已干净
这样当前这个终端窗口马上就好了,但新开窗口又会回来——因为它写在启动文件里,要做第 3 步永久删。
这些变量一般写在 ~/.zshrc(新版 Mac)或 ~/.bash_profile 里。用命令找出来:
$ grep -n -i proxy ~/.zshrc ~/.bash_profile ~/.bashrc 2>/dev/null /Users/you/.zshrc:42:export http_proxy=http://127.0.0.1:7890 # ← 就是它
用编辑器打开那个文件(比如 open -e ~/.zshrc),把含 proxy 的那几行 export 删掉,保存。然后:
$ source ~/.zshrc # 或者直接关掉终端重开
env | grep -i proxy 没输出即成功。之后靠 Clash Verge/FlClash 的 TUN 模式 / 系统代理 让终端走代理。$ env | grep -i proxy http_proxy=http://127.0.0.1:8080 # ← 有输出 = 中招了
$ unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
可能写在下面任意文件里,挨个查、删掉含 proxy 的 export 行:
$ grep -rn -i proxy ~/.bashrc ~/.zshrc ~/.profile /etc/environment /etc/profile.d/ 2>/dev/null
删完 source ~/.bashrc 或重开终端。若是 /etc/environment 里的(全局),需 sudo 编辑删除后重新登录。
export https_proxy=http://127.0.0.1:7897(你 Clash 的正确端口)即可。7897,在 Clash 设置里能看到):export https_proxy=http://127.0.0.1:7897。端口一定要对,错了就还是打不开。打开 Clash Verge / FlClash,在设置 / 端口设置里看「混合端口 / Mixed Port」,我们的配置默认是 7897。做法 B 里就填这个。
开 Clash 的 TUN 模式(虚拟网卡) 就行,它在系统层接管,终端自动走代理,无需任何变量。这也是最省心的方式。
八成是没重开窗口:环境变量改动,已经打开的终端 / VS Code / Docker 不会自动刷新,必须全部关掉重开,或直接重启电脑。
有。若单独给它们设过,也要清:
git:git config --global --unset http.proxy 和 https.proxy;
npm:npm config delete proxy 和 npm config delete https-proxy。
只删含 proxy 字样的那几行/那几个变量,别的不动。删错了顶多某个软件不走代理,不会搞坏系统。拿不准就把 env | grep -i proxy 的结果核对,只删含 proxy 的那几行。