如何从WSL(Ubuntu)中启动Windows上本机安装的Atom或VSCode?

时间:2019-07-10 18:42:40

标签: windows ubuntu visual-studio-code atom-editor windows-subsystem-for-linux

我通过下载正在运行的安装程序在Windows 10上本机安装了Atom编辑器。现在,我启动WSL Ubuntu发行版,并希望使用命令atom .从那里启动Atom(atom编辑器)或使用命令code .

从VSCode(可视化工作室代码)启动。

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.

对不起,它是德语本地化的,但上面写着UNC-paths are not supported

(尚未测试VSCode)

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

4 个答案:

答案 0 :(得分:2)

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

  1. atom
  2. atom .
  3. atom RELATIVE_PATH_FILE

这个脚本没有经过优化,我相信很多人会发现一些极端的情况,但是它可以帮我完成工作。要使用它,只需将其放在~/.local/bin/atom中,然后通过运行chmod +x ~/.local/bin/atom使它可执行。您可能需要重新启动外壳程序才能将~/.local/bin添加到您的路径中。为了简化操作,我将用于我的ubuntu安装的WSL网络驱动器映射到U:,因此您要么要做同样的事情,要么在第9行相应地修改脚本。

#!/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

该脚本执行一些简单的步骤。首先,如果没有命令行参数,它仅使用cmd.exe调用无参数的atom。如果命令行参数为.,它将获取当前目录的路径,否则,将使用realpath获取给定文件的绝对路径。像以前一样,使用sed调用atom之前,使用path将路径从cmd.exe从POSIX转换为Windows格式。

pushdpopd命令就在那里,以消除有关不支持UNC路径的烦人的警告消息:

...
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory

答案 1 :(得分:0)

在提到的blog post @Wlad的“已知问题”部分中,声明了

  

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

因此Atom可能会使用cmd.exe从命令行(可能是一些批处理文件)启动自身,并且鉴于cmd.exe无法将网络资源作为当前目录打开(已将WSL目录视为as),当您尝试从WSL Shell启动Atom时出现了故障。

实际上,在VS Code中,有一个更好的解决方案可以直接从WSL Shell启动{@ {1}}。

您可以按照以下步骤使VS Code从WSL Shell直接启动:

  1. 在Windows上将扩展Remote - WSL安装到VS Code;
  2. 然后,当您在WSL Shell中键入VS Code Remote时,将自动安装VS Code Remote Server,并且VS Code将很快启动。

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

HereVS Code Remote的官方文档。

答案 2 :(得分:0)

爱德华多答案中的脚本是一种很好的方法,但是不允许一次打开多个目录/存储库(例如atom terraform-modules terraform-repo),这是我经常做的事情。

以下是我的看法:

#!/bin/bash

winPathPrefix="U:"

function convertToWinPath() {
  echo "${winPathPrefix}$(realpath ${1})" | sed -e 's/\//\\/g'
}

declare -a atomCmd=(/mnt/c/Windows/System32/cmd.exe /c "atom")

for path in "$@"; do
  atomCmd+=($(convertToWinPath ${path}))
done

${atomCmd[@]} 2>/dev/null

这完全基于Eduardo的脚本,应该允许使用更通用的用例

答案 3 :(得分:0)

这可能有点过时,但您可以简单地运行一个 powershell 并使用:

wsl.exe -d Ubuntu-20.04 //In my case ubuntu

这应该会打开一个 ubuntu 会话或您自己设置的任何 wsl。

在这方面有点笨拙,但会尽力提供帮助。 =)