vscode默认终端不自动加载zsh,因它不读取系统$shell,必须显式配置terminal.integrated.defaultprofile.linux或osx;远程开发需重连ssh、重启vscode窗口,并确保~/.zshrc被登录shell加载。

VSCode 默认终端用的是系统默认 shell,但远程开发时它经常卡在 bash,哪怕你已在服务器上配好 zsh 和 oh-my-zsh,VSCode 也不一定自动生效——必须显式指定 profile,否则只是“装了没用”。
为什么 VSCode 终端不自动加载 zsh?
VSCode 的集成终端启动时读取的是当前登录用户的 $SHELL,但有两点常被忽略:
- 修改
chsh -s $(which zsh)后,**必须完全退出 SSH 会话再重连**(不是只关终端标签页),否则$SHELL不刷新 - VSCode 会缓存终端 profile 列表,尤其 Remote-SSH 连接后,首次启动可能仍 fallback 到旧配置
- Linux 和 macOS 的配置项 key 不同:
terminal.integrated.defaultProfile.linuxvsterminal.integrated.defaultProfile.osx,写错就无效
怎样让 VSCode 真正用上 oh-my-zsh?
光装 zsh 和 oh-my-zsh 不够,关键三步要闭环:
- 确认远程服务器上
echo $SHELL输出是/usr/bin/zsh(Ubuntu)或/bin/zsh(macOS),不是/bin/bash - 在 VSCode 的
settings.json中添加对应平台的 profile 配置,例如 Linux:"terminal.integrated.defaultProfile.linux": "zsh"
,不要用已废弃的terminal.integrated.shell.linux - 重启 VSCode 窗口(不只是终端面板),然后新开一个终端,执行
echo $ZSH—— 有输出才说明oh-my-zsh框架真正加载了
agnoster 主题显示乱码/图标缺失?
这不是 VSCode 或 zsh 的问题,而是字体没配对。agnoster、powerlevel10k 等主题依赖 Nerd Font 图标集,普通等宽字体(如 Fira Code、JetBrains Mono)默认不带这些 glyph:
- 必须安装 Nerd Font 版本,例如
FiraCode Nerd Font,不能只装基础版 - VSCode 设置中要显式指定:
"terminal.integrated.fontFamily": "'FiraCode Nerd Font', monospace"
,单引号不能少 - Windows 用户注意:WSL2 下需在 Windows Terminal 或 VSCode 的 Windows 端设置字体,WSL 内部不管理字体渲染
zsh-autosuggestions 补全不出现?
插件装了但没生效,常见于路径和加载顺序问题:
- 确保
zsh-autosuggestions插件已克隆到~/.oh-my-zsh/custom/plugins/下(不是~/.zshrc同级目录) -
plugins=(... zsh-autosuggestions)必须写在~/.zshrc的source $ZSH/oh-my-zsh.sh之前,否则插件不会被加载 - Remote-SSH 场景下,如果终端启动时提示
command not found: compdef,说明zsh-completions未启用,需额外加plugins+=(zsh-completions)
最易被忽略的一点:VSCode Remote-SSH 的终端初始化顺序是「先启 shell,再读用户配置」,所以任何依赖 ~/.zshrc 的功能(比如插件、alias、PATH 修改),都必须确保该文件在 shell 启动时被 source —— 而不是靠手动 source ~/.zshrc 临时补救。











