在 WSL 中的当前目录中打开 Atom

在 WSL 中的当前目录中打开 Atom

我希望能够atom .在 WSL 中输入并使用当前目录打开 Atom。

我尝试添加alias atom='/mnt/c/Users/Leo/AppData/Local/atom/atom.exe'到我的.bashrc。它打开了 Atom,但不在当前目录中。

如果我添加alias atom='/mnt/c/Users/Leo/AppData/Local/atom/app-1.14.4/atom.exe',它就可以工作,但是每次 Atom 更新时我都必须更新它。

有没有更好的办法?

答案1

我设法打开(Windows 版本)我的 WSL 中的 Atom 使用了 Josh Brobst 的建议并做了一些改进。

我可以想出两种不同的方法。


  1. 让 Atom 打开你当前的工作目录

我通过升级提到 Josh Brobst 的建议来做到这一点:

alias atom='/mnt/c/Windows/System32/cmd.exe /c "atom /PathToYourWSLRootFs/$PWD"'

这将使 Atom 通过 Windows 文件系统进入你的 WLS 目录,其中包含根文件系统

之后,将/$PWD其扩展为当前目录(WSL 系统内部)的完整路径,并将其附加到包含 WLS 文件系统的目录路径中

这样 Atom 就会将当前工作目录的完整路径作为参数,并将其作为文件夹打开


  1. 让 Atom 打开特定文件

为此,我编写了一个简单的 bash 脚本,atom您可以在 WSL 中创建一个别名,它将运行此脚本,而不必遍历您的PATH.

#!/bin/bash

/mnt/c/Windows/System32/cmd.exe /c "atom ./rootfs$PWD/$1"

其中“./rootfs”是我的 ArchLinux 根文件系统的路径(在 Windows fs 中)。当然,您需要像这样放置您的:"atom /pathToYourWslRootFs/$PWD/$1"

$PWD将再次将路径附加到当前工作目录(在 WSL 内部)

$1然后将附加你启动脚本的参数

用法:该脚本的内容如下:

1)cd 到包含所需文件的目录

2)运行:atom desired_file_name

注意:为了使步骤 2)正常工作,您需要为脚本设置别名,将其放在包含在目录中$PATH,或者通过提供脚本的完整路径来运行它


这两种方法对我来说都很有效。我并不是说这个脚本写得再好不过了,只是我不需要它更好。然而,我认为这应该让每个人都有一个解决这个问题的基本思路,并有机会让他们的脚本完全符合自己的喜好。

我希望这对某人有帮助。

答案2

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

  1. atom
  2. atom .
  3. atom RELATIVE_PATH_FILE

此脚本未经过优化,我相信很多人会发现一些极端情况,但它可以帮我完成工作。要使用它,只需将其放入~/.local/bin/atom并通过运行使其可执行chmod +x ~/.local/bin/atom。您可能需要重新启动 shell 才能~/.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

该脚本执行几个简单的步骤。首先,如果没有命令行参数,它只需使用 调用 atomcmd.exe而不使用参数。如果命令行参数是.,它会获取当前目录的路径,否则,它会使用 获取给定文件的绝对路径。在调用 atom 之前,realpath使用 将路径从 POSIX 格式转换为 Windows 格式,与之前一样,但带有路径参数。sedcmd.exe

pushd和命令popd只是为了消除有关不支持 UNC 路径的烦人的警告消息:

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

答案3

尝试这个:

alias atom='/mnt/c/Windows/System32/cmd.exe /c "atom ."'

为了使 atom cli 可用于 cmd、cygwin 和 msys,atom 会将其放入C:\Users\<name>\AppData\Local\atom\binWindows 本地用户的 PATH 环境变量中。因此,此别名应atom.cmd使用您当前的 bash 目录从该位置运行。当然,如果出于某种原因它不在 Windows PATH 中,只需将 atom 替换为 atom.cmd 的 Windows 绝对路径即可。

我不能 100% 地确定.cmd 所看到的将是 Windows Bash 中的当前目录,不幸的是无法对其进行测试(不是在内部版本上),但是互操作博客文章让我认为它应该可以工作(假设你在 bash 中的某个地方/mnt/<drive letter>/):

如果已启动的 NT 进程的当前工作目录位于 DrvFs 挂载内的某个位置,它将被 NT 进程继承。

相关内容