如何从 WSL (Ubuntu) 中启动原生安装在 Windows 上的 Atom 或 VSCode?

Wla*_*lad 7 windows ubuntu atom-editor visual-studio-code windows-subsystem-for-linux

我已经通过下载运行安装程序在 Windows 10 上本地安装了 Atom 编辑器。现在我启动 WSL Ubuntu 发行版,并希望从那里使用命令atom .或 VSCode(visual-studio-code)从那里启动 Atom(原子编辑器)与命令code .

Atom 启动,但不在执行命令的目录中,而是显示来自C:\\Windows. 此外,Ubuntu WSL 终端显示以下错误消息:

atom .
grep: /etc/wsl.conf: No such file or directory
"\\wsl$\Ubuntu-18.04\home\wlad\projects\udemy\flask-bootcamp\Flask-Bootcamp-master"
CMD.EXE wurde mit dem oben angegebenen Pfad als aktuellem Verzeichnis gestartet.
UNC-Pfade werden nicht unterstützt.
Stattdessen wird das Windows-Verzeichnis als aktuelles Verzeichnis gesetzt.
Run Code Online (Sandbox Code Playgroud)

对不起,它是德语本地化的,但它说的是 UNC-paths are not supported

(还没有测试过 VSCode)

那么如何从 WSL 中使用安装在 Windows 10 上的 Atom 或 VSCode 编辑器?

**更新** 截至今天(2020 年 4 月),有一种更好的方法可以在带有 WSL、虚拟机 (VM) 甚至容器的 Windows 上使用 VSCode。查看VSCode 的远程开发插件

Yan*_*lin 6

在“已知问题”部分在博客文章@Wlad 提到的

\n\n
\n

访问 Linux 文件被视为与访问网络资源相同,并且任何访问网络资源的规则仍然适用,例如:使用 CMD 时,cd \\\\wsl$\\Ubuntu\\home 将不起作用(因为 CMD 不起作用)支持 UNC 路径作为当前目录),但是复制 \\\\wsl$\\Ubuntu\\home\\somefile.txt C:\\dev\\ 将起作用

\n
\n\n

因此,Atom 可能会使用cmd.exe命令行(可能是某个批处理文件)来启动自身,并且考虑到以下事实:cmd.exe无法将网络资源作为当前目录(WSL 目录被视为)打开,因此当您尝试启动 Atom 时会出现失败来自 WSL 外壳。

\n\n

实际上,在 VS Code 中,有一个更好的解决方案可以直接从 WSL shell 启动 VS Code:VS Code Remote

\n\n

您可以采取以下步骤使 VS Code 能够直接从 WSL shell\xef\xbc\x9a 启动

\n\n
    \n
  1. Remote - WSL在 Windows 端安装 VS Code 的扩展;
  2. \n
  3. 然后,当您输入code .WSL shell 时,将自动安装 VS Code 远程服务器,并且 VS Code 将很快启动。
  4. \n
\n\n

通过使用VS Code Remote,您不仅可以在 VS Code 中打开目录,还可以在许多其他方面受益:例如,您可以使用 WSL shell 作为 VS Code 中的集成 shell,直接从 VS Code 运行 WSL 中的程序。

\n\n

是 的官方文档VS Code Remote - WSL

\n


Edu*_*rdo 6

我创建了一个简短的脚本来处理我最常用的三个 atom 命令(我将 Ubuntu 与 WSL 一起使用):

  1. atom
  2. atom .
  3. atom RELATIVE_PATH_FILE

这个脚本没有优化,我相信很多人会发现边缘情况,但它为我完成了工作。要使用它,只需将它放入~/.local/bin/atom并通过运行chmod +x ~/.local/bin/atom. 您可能需要重新启动 shell 才能~/.local/bin将其添加到您的路径中。为了稍微简化一些事情,我将 ubuntu 安装的 WSL 网络驱动器映射到U:.

#!/bin/bash

if [ -z $1 ]; then
  pushd /mnt/c > /dev/null
  /mnt/c/Windows/System32/cmd.exe /c "atom"
else
  [[ $1 = "." ]] && path=$(pwd) || path=$(realpath $1)

  winPath=$(echo "U:$path" | sed -e 's/\//\\/g')

  pushd /mnt/c > /dev/null
  /mnt/c/Windows/System32/cmd.exe /c "atom $winPath"
fi

popd > /dev/null
Run Code Online (Sandbox Code Playgroud)

该脚本执行几个简单的步骤。首先,如果没有命令行参数,它会简单地调用 atom usingcmd.exe不带参数。如果命令行参数是.,则获取当前目录的路径,否则,它使用 获取给定文件的绝对路径realpath。路径从 POSIX 转换为 Windows 格式,使用sedbefore 调用 atom using cmd.exe,但使用 path 参数。

pushdpopd命令只是为了摆脱不支持有关UNC路径恼人的警告信息:

...
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory
Run Code Online (Sandbox Code Playgroud)