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

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

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

例如:

ls | wsl grep 'log'

我试图使用 vim 打开一个名为的文件.htaccess,但我不想输入文件的全名。所以我只是输入wsl vim .ht并按下 tab 键让 powershell 自动完成路径。这个自动完成功能wsl vim .\.htaccess似乎没问题,但当我按下回车键时,vim 打开了一个名为的新文件..htaccess(请注意额外的句点)。就在那时,我意识到它使用的是 Windows 的目录分隔符反斜杠而不是正斜杠。大概反斜杠只是转义了句点,这就是为什么它在 vim 中试图创建一个名为的新文件..htaccess

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

例如,此命令在 powershell 中有效:

cd C:/Windows

尽管 Windows 使用反斜杠,但此命令仍然有效,并带我进入C:\Windows。那么有没有办法让自动完成功能使用正斜杠?

答案1

我尽量避免“否定答案”,但有时别无选择。目前,我想不出有什么好办法来做到这一点。有一个 Github问题/功能请求今年早些时候,PowerShell PSReadLine 团队对此作出了回应,称其“符合设计”。

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

[IO.Path]::DirectorySeparatorChar,但作为对这个答案指出,它是只读的。

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

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

    wslpath命令在某些 WSL 发行版(至少是 Ubuntu)中默认安装,在其他发行版中可以通过西弗吉尼亚大学包裹。

    例如wslpath "C:\\"回报/mnt/c

    但随后我们又遇到了双反斜杠引用问题等等。最终,我认为这太过黑客并且很可能非常“脆弱”。

  • 我相信你可以在 .NET 中处理这个ArgumentCompleter命令wsl。我已经写一个它处理 WSL 命令的各种标志,欢迎您将其用作基础。

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

相关内容