windows10 visual studio code 在WSL中开发 linux c 程序

在WSL中开发

Visual Studio代码远程- WSL扩展允许您使用的Windows子系统为Linux(WSL)来自VS代码您的全职开发环境权。您可以在基于Linux的环境中进行开发,使用特定于Linux的工具链和实用程序,以及在Windows的舒适环境下运行和调试基于Linux的应用程序。

该扩展名直接在WSL中运行命令和其他扩展名,因此您可以编辑WSL或已安装的Windows文件系统中的文件(例如/mnt/c),而不必担心路径问题,二进制兼容性或其他跨OS挑战。

WSL体系结构

这使得VS Code可以提供本地质量的开发体验 -包括完整的IntelliSense(完成功能),代码导航和调试- 不管代码托管在何处

入门

安装

要开始使用,您需要:

  1. 安装Windows Subsystem for Linux和首选的Linux发行版。

    注意: WSL 1 对于某些类型的开发确实有一些已知的限制,并且WSL 2支持是试验性的。另外,由于glibc扩展程序内部代码的依赖性,安装在Alpine Linux中的扩展程序可能无法工作。有关详细信息,请参见“ 远程开发和Linux”文章。

  2. Windows端(不在WSL中)安装Visual Studio Code。

    注意:在安装过程中提示您选择“其他任务”时,请确保选中“ 添加到路径”选项,以便您可以使用以下code命令在WSL中轻松打开文件夹。

  3. 安装远程开发扩展包。

打开一个远程文件夹或工作区

从WSL终端

使用VS Code在Linux的Windows子系统内部打开文件夹与从命令提示符或PowerShell打开Windows文件夹非常相似。

  1. 打开WSL终端窗口(使用开始菜单项或wsl在命令提示符/ PowerShell中键入)。

  2. 导航到您要在VS Code中打开的文件夹(包括但不限于Windows文件系统挂载,例如/mnt/c

  3. 键入code .在终端中。首次执行此操作时,您应该看到在WSL中运行所需的VS Code提取组件。这应该只需要一会儿,并且只需要一次。

    注意:如果此命令不起作用,则可能需要重新启动终端,或者在安装VS Code时未将其添加到路径中。

  4. 片刻之后,将出现一个新的VS Code窗口,您将看到VS Code正在WSL中打开该文件夹的通知。

    WSL开始通知

    VS Code现在将继续在WSL中进行自我配置,并让您保持最新状态。

  5. 完成后,您现在将在左下角看到WSL指示器,并且可以像平常一样使用VS Code!

    WSL状态栏项目

而已!您在此窗口中执行的所有VS Code操作都将在WSL环境中执行,从编辑和文件操作到调试,使用终端等更多操作。

从VS代码

或者,您可以直接从VS Code打开“远程WSL”窗口:

  1. 启动VS Code。
  2. 按F1键,为默认发行版选择“ Remote-WSL:新窗口”,或为特定发行版选择“ 使用Distro的Remote-WSL:新窗口”
  3. 使用文件菜单打开您的文件夹。

如果已经打开了文件夹,则还可以使用Remote-WSL:在WSL中重新打开命令。系统将提示您使用哪个发行版。

如果您在WSL窗口中并想在本地窗口中打开当前输入,请使用Remote-WSL:在Windows中重新打开

从WINDOWS命令提示符

要直接从Windows提示符下打开WSL窗口,请使用--remote命令行参数:

code --remote wsl+

例如: code --remote wsl+Ubuntu /home/jim/projects/c

使用Git

如果在WSL和Windows中使用相同的存储库,请确保设置一致的行尾。有关详细信息,请参见提示和技巧。

您还可以通过将WSL配置为使用Windows Git凭据管理器来避免使用密码。有关详细信息,请参见提示和技巧。

管理扩展

VS Code在以下两个位置之一运行扩展:在UI /客户端本地或在WSL中。虽然会在本地安装影响VS Code UI的扩展(例如主题和代码片段),但大多数扩展将驻留在WSL内。

如果从扩展视图安装扩展,它将自动安装在正确的位置。安装后,您可以根据类别分组确定扩展的安装位置。将有“ 本地-已安装”类别和一个“ WSL”类别。

工作区扩展类别

本地扩展类别

注意:如果您是扩展作者,并且扩展无法正常工作或安装在错误的位置,请参阅支持远程开发以获取详细信息。

实际上需要远程运行的本地扩展将在“ 本地安装”类别中显示为灰色并禁用。选择安装在您的远程主机上安装扩展。

带安装按钮的禁用扩展

您还可以通过以下方法将WLS中所有本地安装的扩展安装到WSL中:使用“ 本地-已安装”标题栏右侧的云按钮,选择“ 在WSL中安装本地扩展:[名称]”。这将显示一个下拉列表,您可以在其中选择要在WSL实例中安装的本地安装扩展。

安装所有扩展

在WSL中打开终端

通过VS Code在WSL中打开终端很简单。在WSL中打开文件夹后,您在VS Code中打开的任何终端窗口Terminal> New Terminal)将自动在WSL中运行,而不是在本地运行。

您也可以在code同一终端窗口中使用命令行来执行许多操作,例如在WSL中打开新文件或文件夹。键入code --help以查看命令行中可用的选项。

使用代码CLI

在WSL中进行调试

在WSL中打开文件夹后,就可以像在本地运行应用程序时一样的方式使用VS Code的调试器。例如,如果您在中选择启动配置launch.json并开始调试(F5),则该应用程序将在远程主机上启动并将调试器附加到该主机上。

有关在中配置VS Code调试功能的详细信息,请参见调试文档.vscode/launch.json

WSL特定设置

在WSL中打开文件夹后,也会重复使用VS Code的本地用户设置。虽然这可以使您的用户体验保持一致,但是您可能需要在本地计算机和WSL之间更改其中的某些设置。幸运的是,一旦连接到WSL,您还可以通过运行“ 偏好设置”来设置WSL特定的设置从命令面板(F1)打开“远程设置”命令,或者在“设置”编辑器中选择“ 远程”选项卡。每当您在WSL中打开文件夹时,这些设置将覆盖您已有的任何本地设置。

高级:环境设置脚本

在WSL中启动VS Code Remote时,不运行任何外壳启动脚本。这样做是为了避免针对shell调整的启动脚本出现问题。如果要运行其他命令或修改环境,可以在安装脚本中完成~/.vscode-server/server-env-setup(Insiders :)~/.vscode-server-insiders/server-env-setup。如果存在,则在启动服务器之前先处理脚本。

该脚本必须是有效的Bourne Shell脚本。请注意,无效的脚本将阻止服务器启动。如果最后得到一个阻止服务器启动的脚本,则必须使用常规的WSL Shell并删除或重命名安装脚本。

检查WSL日志(远程WSL:打开WSL日志)以获取输出和错误。

高级:在容器中打开WSL2文件夹

如果您使用的是WSL2和Docker Desktop的WSL2后端,则可以使用Remote-Containers扩展来处理存储在WSL中的源代码!只需按照以下步骤操作:

  1. 如果尚未安装和安装 Docker Desktop的WSL2支持,请安装并设置。

    提示: 转到“设置”>“资源”>“ WSL集成”,然后将Docker与您将使用的WSL发行版集成。

  2. 如果尚未安装,请同时安装Remote-Containers扩展程序和WSL扩展程序。

  3. 接下来,像往常一样在WSL中打开您的源代码文件夹。

  4. 在WSL中打开文件夹后,从命令面板(F1)中选择“ 远程容器:在容器中重新打开文件夹”

  5. 如果该文件夹中没有.devcontainer/devcontainer.json文件,则将要求您从可过滤列表或现有Dockerfile或Docker Compose文件(如果存在)中选择一个起点。

  1. select-dev-container-def.pnguploading.4e448015.gif正在上传…重新上传取消

  2. VS Code窗口(实例)将重新加载并开始构建dev容器。进度通知提供状态更新。

    开发容器进度通知

  3. 构建完成后,VS Code将自动连接到容器。现在,您可以从容器内部使用源代码。

有关更多信息,请参见Remote-Containers文档。

已知限制

本节包含WSL的常见问题列表。目的不是提供完整的问题列表,而是强调WSL中常见的一些问题。

有关与WSL相关的活动问题的列表,请参见此处。

我看到EACCESS:尝试重命名打开的工作区中的文件夹时,权限被拒绝的错误

这是由VSCode激活的文件监视程序导致的WSL文件系统实现(Microsoft / WSL#3395和Microsoft / WSL#1956)的已知问题。该问题仅在WSL 2中得以解决。

为避免此问题,请将其设置remote.WSL.fileWatcher.polling为true。但是,基于轮询的文件监视对大型工作区的性能有影响。

对于较大的工作空间,您想增加轮询间隔:remote.WSL.fileWatcher.pollingInterval并控制要监视的文件夹:files.watcherExclude

WSL 2没有文件监视程序问题,也不受新设置的影响。