远程插件路径与本地完全隔离,必须装在远端~/.vscode-server/extensions/(linux/macos)或c:\users\username.vscode-server\extensions\(windows server),且所有路径配置以远程文件系统为基准,本地路径无效。

远程插件的路径逻辑和本地完全隔离
VS Code 远程开发不是“把本地插件复制过去”,而是分层运行:本地只负责 UI 渲染,真正干活的进程(比如语言服务器、调试器)必须在远程启动。这意味着插件对路径的处理,完全取决于它运行在哪一侧。
典型错误现象:python.defaultInterpreterPath 配置生效但找不到解释器、pyright 报 command not found、调试器启动失败却没报错。
- 所有路径配置(如
python.defaultInterpreterPath、files.exclude、terminal.integrated.env.linux)都以远程文件系统为基准,写/home/user/project才有效,写C:\project或~/project(未展开)大概率失效 - 插件若依赖 shell 命令(比如调用
git、npm),这些命令必须在远程$PATH中可用;which git在远程终端里要返回真实路径 -
settings.json里加"remote.extensionKind": {"ms-python.python": ["workspace"]}没用——Remote-SSH 不支持这种声明式控制,插件是否启用由安装位置决定
怎么确认某个插件到底装在哪儿
只看 Extensions 视图顶部状态栏文字,别信列表里的“已启用”三个字。
打开远程窗口(即左下角显示 SSH: hostname 的那个),再按 Ctrl+Shift+X。顶部必须明确显示 Installed on SSH: hostname,才表示插件已装到远程服务器上。
- Linux/macOS 远程路径固定为:
~/.vscode-server/extensions/,里面文件夹名类似ms-python.python-2024.12.0 - Windows Server 远程路径是:
C:\Users\username\.vscode-server\extensions\ - 手动删插件?直接进上述目录删对应文件夹即可,
~/.vscode/extensions(本地路径)动了也没用 - 插件版本和 VS Code Server commit ID 绑定,升级 VS Code 后远程可能卡在旧版本,重装插件常是唯一解
路径相关配置容易漏掉的权限和环境变量
即使路径写对了,也可能因权限或环境变量缺失而静默失败。
常见现象:插件 UI 正常显示,但补全/调试/格式化全部不响应;远程终端里手动执行 pyright --version 成功,但 VS Code 里就是报错。
-
~/.vscode-server/目录及子目录需有可执行权限,尤其bin/*/code-server,遇到Permission denied就跑:chmod +x ~/.vscode-server/bin/*/bin/code-server - 远程 shell 启动时加载的 profile(如
~/.bashrc)可能没被 VS Code Server 读取,导致$PATH缺失关键路径;验证方式:在 VS Code 内置终端里执行echo $PATH,对比你手动 ssh 登录后执行的结果 - Python 插件依赖
debugpy和pyright,它们必须用pip3 install --user安装(避免权限问题),且确保~/.local/bin在$PATH里
本地和远程路径混用时的典型陷阱
有些插件(比如 SFTP、Codex)会主动跨侧读写,这时路径语义就容易混乱。
例如 SFTP 插件的 sftp.json 里 "remotePath" 是远程路径,"localPath" 是本地路径,但如果你在远程窗口里用命令面板执行 SFTP: Config,生成的配置仍默认填本地路径——必须手动改。
- Codex 插件需要
~/.codex/auth.json,这个路径必须在远程存在且内容正确;但认证流程本身在本地完成,auth.json是从C:\Users\username\.codex\auth.json传过去的,路径不能硬编码 - 用
code --remote-ssh-remote+host /path命令行打开远程目录时,/path是远程绝对路径,不要加file://前缀,也不要用 Windows 风格反斜杠 - 调试配置
launch.json中的program、cwd、envFile全部按远程路径解析,envFile指向的文件必须存在于远程机器上
路径问题从来不是单点故障,而是配置、权限、环境、插件运行位置四者咬合的结果。盯着一个地方改,不如先确认插件真正在哪跑、which 能否查到依赖、echo $PATH 是否包含预期目录。











