问题背景
在使用现代 IDE 和编辑器(如 VSCode、Neovim、Zed)时,许多 Language Server Protocol (LSP) 服务需要访问 GitHub API 来获取依赖信息、类型定义或文档。常见的例子包括:
- rust-analyzer: 获取 crates.io 的依赖元数据
- TypeScript/JavaScript LSP: 下载 DefinitelyTyped 类型定义
- Python LSP (pyright): 查询包的类型信息
为什么会遇到 Rate Limit?
GitHub API 对未认证请求有严格的速率限制:
- 未认证:每小时 60 次请求
- 已认证:每小时 5000 次请求
当 LSP 频繁查询依赖信息时,很容易触发限制,导致以下错误:
API rate limit exceeded for xxx.xxx.xxx.xxx这会导致代码补全、类型检查等功能失效。
解决方案
方法一:Shell 启动脚本(适用于终端启动的 IDE)
如果你从终端启动 IDE,可以在 shell 启动脚本中设置环境变量:
1. 编辑对应的启动脚本:
- Bash:
~/.bashrc - Zsh:
~/.zshrc - Fish:
~/.config/fish/config.fish - Hyprland:
~/.config/hypr/hyprland.conf
2. 添加以下内容:
export GITHUB_TOKEN="ghp_xxxxxxxxxxxxxxxxx"3. 重新加载配置:
source ~/.zshrc # 或对应的配置文件4. 重启 IDE,确保它能继承新的环境变量。
方法二:systemd environment.d(适用于图形界面启动的应用)
⚙️ 重要:如果你在 Wayland/X11 桌面环境中直接点击图标启动 IDE(如 VSCode、Zed),这些应用不会继承你在 shell 中设置的环境变量。
对于使用 systemd 的发行版(Fedora、Arch、Ubuntu 等),需要使用 systemd 的用户环境变量机制:
1. 创建配置文件:
mkdir -p ~/.config/environment.d2. 编辑或创建 ~/.config/environment.d/99-github.conf:
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxx注意:此文件使用简单的
KEY=VALUE格式,不需要export关键字。
3. 导入环境变量到当前会话:
systemctl --user import-environment GITHUB_TOKEN4. 重启图形会话或重启 IDE。
如果还不生效,可以注销并重新登录,或重启 systemd --user 管理的服务。
如何获取 GitHub Token?
- 访问 GitHub Personal Access Tokens
- 点击 Generate new token → Generate new token (classic)
- 给 token 命名(如
LSP Access) - 不需要勾选任何权限(只读公共 API 即可)
- 生成后立即保存(只显示一次)
验证配置
你可以在终端中验证环境变量是否设置成功:
echo $GITHUB_TOKEN或者检查 IDE 进程的环境变量:
# 查找 VSCode 进程 ID
ps aux | grep -i code
# 查看进程的环境变量(替换 <PID> 为实际进程 ID)
cat /proc/<PID>/environ | tr '\0' '\n' | grep GITHUB_TOKEN注意事项
不同的 LSP 可能使用不同的环境变量名,可能有:
GITHUB_TOKENGH_TOKENGITHUB_API_TOKEN
如果遇到问题,查看对应 LSP 的文档。
Token 安全:
- 不要将 token 提交到 Git 仓库
- 定期轮换 token
- 使用最小权限原则(LSP 只需公共读取权限)
特殊情况:非 systemd 用户会话:
- 如果你的桌面环境没有完整的
systemd --user会话(例如手动启动 i3 或 Sway),~/.config/environment.d/可能不会被读取 - 这种情况下,需要在窗口管理器的配置文件中设置环境变量:
- i3: 在
~/.xinitrc或~/.config/i3/config中添加exec --no-startup-id export GITHUB_TOKEN="..." - Sway: 在
~/.config/sway/config中添加exec export GITHUB_TOKEN="..."
- i3: 在
- 推荐做法:如果你的系统使用 systemd 启动 i3/Sway,仍然建议使用
environment.d/,这样更统一、更安全
- 如果你的桌面环境没有完整的
macOS 用户:
- 使用
launchctl setenv GITHUB_TOKEN "ghp_xxx"设置全局环境变量 - 或在
~/.zshrc/~/.bash_profile中设置(仅对终端启动的应用有效)
- 使用