有没有办法让 Powershell 使用正斜杠而不是反斜杠来自动完成路径?

Cav*_*son 11 windows powershell path command-line windows-subsystem-for-linux

最近我一直在使用该wsl命令在 powershell 中运行 Linux (Ubuntu) 二进制文件和命令。

例如:

ls | wsl grep 'log'
Run Code Online (Sandbox Code Playgroud)

我试图使用 vim 打开一个名为 的文件.htaccess,但我不想输入该文件的全名。因此,我只是输入wsl vim .ht并按下 Tab 键以使 powershell 自动完成路径。这个自动完成wsl vim .\.htaccess看起来很好,但是当我按下 Enter 键时,vim 打开了一个名为..htaccess(注意附加句点)的新文件。就在那时我意识到它使用的是 Windows 的目录分隔符反斜杠而不是正斜杠。据推测,反斜杠刚刚逃脱了句点,这就是为什么在 vim 中它试图创建一个名为..htaccess.

我想知道是否有任何方法可以调整 powershell,以便它使用正斜杠而不是反斜杠来自动完成路径。我知道最近 Windows 可以理解并翻译正斜杠。

例如,此命令在 powershell 中运行:

cd C:/Windows
Run Code Online (Sandbox Code Playgroud)

尽管 Windows 使用反斜杠,这个命令仍然有效并将我带到了C:\Windows. 那么有没有办法让自动补全使用正斜杠呢?

Not*_*1ds 7

我尽量避免“否定答案”,但有时没有太多选择。目前我想不出有什么好的办法来做到这一点。今年早些时候有一个 Github问题/功能请求,PowerShell PSReadLine 团队回复称“按设计”。

不过,为了以防万一,我查看了Get-PSReadLineOption可用的选项,但其中没有路径分隔符的选项。

有,但正如对此答案[IO.Path]::DirectorySeparatorChar的评论指出的那样,它是只读的。

在考虑可能的替代方案时,我想不出太多:

  • wsl可能有一种方法可以以足够通用的方式将 PowerShell 函数包装在您的调用周围,以便它可以处理不同的命令。该函数需要解析参数并wslpath围绕任何路径运行命令。

    wslpath命令默认安装在某些 WSL 发行版(至少是 Ubuntu)中,并且可以通过wslu包安装在其他发行版上。

    例如wslpath "C:\\"退货/mnt/c

    但随后我们也会遇到双反斜杠引用问题等。最终,我认为这太老套了,而且可能非常“脆弱”。

  • 我相信您可以在 .NET 中ArgumentCompleter使用wsl命令来处理这个问题。我已经编写了一个处理 WSL 命令的各种标志的程序,欢迎您将其用作基础。

    我只是不确定重新编写文件/目录的完成程序有多困难,但我觉得这不值得付出努力。