在适用于 Linux 的 Windows 子系统开发环境中编辑文件

在适用于 Linux 的 Windows 子系统开发环境中编辑文件

适用于 Linux 的 Windows 子系统(WSL)可以很好地使大多数命令行 Linux 工具可用,并且无需修改即可在 Windows 上运行。然而,当人们想要

  • 使用构建项目Linux 工具链 没有得到良好支持的 Windows 版本(Ruby、Node 等)
  • 使用编辑文件基于 Windows 的 GUI 编辑器例如 Visual Studio 代码。

问题是 Windows 应用程序无法修改虚拟 lxss 文件系统内的文件。直接修改这些文件已知会导致各种问题。

因此,在使用 WSL 进行开发时似乎只有两个次优选择:

  1. 将项目存储在 lxss ( /home/foo) 下。常规工具链可以正常工作。但是,编辑仅限于基于终端的 Vim/Emacs 或可以在X 服务器不稳定,运行起来不如Windows上的原生编辑器流畅。

  2. 将项目存储在 Windows 文件系统 ( /mnt/c/Users/foo) 下。现在可以使用任何基于 Windows 的编辑器进行开发。但是,基于 Linux 的工具链很脆弱,因为它不是为在“网络驱动器”上使用而设计的,并且可能会导致文件监视或者数据库

有没有办法可以同时实现两全其美的效果 - 即能够使用本机 Windows 应用程序进行编辑,但 Linux 工具链仍然像在本地驱动器上一样工作?

答案1

微软最近增加了对此的全面支持,它应该会在 2019 年 4 月 (19H1) 更新中全面推出。一旦准备就绪,9P 服务器将在 Linux 发行版运行时在后台运行。9P 服务器将能够处理 Linux 文件系统元数据,Windows 将能够将其视为网络驱动器,以便可以安全地访问它。您可以在以下网址阅读有关它的信息https://blogs.msdn.microsoft.com/commandline/2019/02/15/whats-new-for-wsl-in-windows-10-version-1903/

借助新功能,只要通过 9P 服务器,您就可以安全地从 Windows 访问 Windows 和 Linux 文件系统文件。这将在 WSL 内部本地处理。例如,从 WSL 命令行,您将能够键入code /mnt/c/Users/username/src/windows-file.txt以在 VS Code 中打开 Windows 文件,或键入code /home/username/src/linux-file.txt以在 VS Code 中打开 Linux 文件。

如果您不是 Windows Insider 计划的成员,您将无法访问此功能,因此您仍然必须使用较旧的方法,例如 wslpath。

wslpath 将在 Windows 和 Linux 样式的路径之间进行转换,以便您可以轻松地从 WSL 命令行打开 Windows 文件。根据https://github.com/Microsoft/WSL/issues/3146#issuecomment-388118689,它将拒绝转换 Linux 文件系统路径(即 %AppData%\lxss),因为如果没有 9P,从 Windows 修改这些文件是不安全的。这意味着您无法打开/home/username/src/linux-file.txt,但可以使用code "$(wslpath -aw /mnt/c/Users/username/src/windows-file.txt)"

过去,有许多第三方工具可以执行相同的转换,但 wslpath 本身就可以完成该转换——事实上,ls -l /bin/wslpath它显示它只是一个指向 /init 的链接。

答案2

2018 年上半年,微软发布了对 WSL 的一些改进,解决了以下一些问题:

这些都不能完全解决我最初问题中的问题,但它们可能会在某些特定情况下提高可用性。

答案3

如果您想运行 Linux 命令并使用 Windows 编辑器进行编辑。您可以将源代码(您想要编辑和测试的)保存在文件系统中的某个位置(例如 c:\source\ ),然后通过 /mnt/c/source 在 Linux 控制台中访问它。希望这对您有所帮助。

答案4

我发现Cygwin 可以开箱即用地与 WSL 协同工作

P9 网络 FS 通过 UNC 路径模式公开\\wsl$\DISTRO,例如\\wsl$\debian

Cygwin 具有安装 UNC 的语法,例如:

mount '//wsl$/debian' /wsl/debian

找到您的发行版列表,wsl -l并在 Cygwin 中永久安装它们/etc/fstab

//wsl$/debian /wsl/debian      ntfs binary,noacl,posix=0 0 0
//wsl$/ubuntu /wsl/ubuntu      ntfs binary,noacl,posix=0 0 0
//wsl$/alpine /wsl/alpine      ntfs binary,noacl,posix=0 0 0

现在您可以使用 Cygwin 的 Emacs W32、Midnight commander 等。

看:

2022 年更新MS Code 支持 WSL:https://docs.microsoft.com/en-us/windows/wsl/tutorials/wsl-vscode

其他 IDE 的支持即将推出。

相关内容