最近我一直在使用该wsl
命令在 powershell 中运行 Linux (Ubuntu) 二进制文件和命令。
例如:
ls | wsl grep 'log'
我试图使用 vim 打开一个名为.htaccess
但我不想输入文件的全名的文件。因此,我只是键入wsl vim .ht
并按下选项卡以让 powershell 自动完成路径。这个自动完成wsl vim .\.htaccess
似乎很好,但是当我按下回车键时,vim 打开了一个名为的新文件..htaccess
(注意附加句点)。那时我意识到它使用的是 Windows 的反斜杠而不是正斜杠的目录分隔符。大概反斜杠刚刚逃脱了句号,这就是为什么在 vim 中它试图创建一个名为..htaccess
.
我想知道是否有任何方法可以调整 powershell,以便它使用正斜杠来自动完成路径而不是反斜杠。我知道最近 Windows 可以理解并翻译正斜杠。
例如,此命令在 powershell 中工作:
cd C:/Windows
即使 Windows 使用反斜杠,这个命令仍然有效并把我带到了C:\Windows
. 那么有没有办法让自动完成使用正斜杠?
我尽量避免“否定答案”,但有时没有太多选择。目前,我想不出任何好的方法来做到这一点。今年早些时候有一个 Github问题/功能请求,PowerShell PSReadLine 团队回复说它是“按设计”。
不过,以防万一,我查看了
Get-PSReadLineOption
可用的选项,但那里没有路径分隔符选项。有
[IO.Path]::DirectorySeparatorChar
,但正如对此答案的评论指出的那样,它是只读的。在考虑可能的替代方案时,我想不出太多:
可能有一种方法可以以
wsl
足够通用的方式将 PowerShell 函数包装在您的调用周围,以便它可以处理不同的命令。该函数需要解析参数并wslpath
围绕任何路径运行命令。该
wslpath
命令默认安装在某些 WSL 发行版(至少是 Ubuntu)中,并且可以通过wslu包安装在其他发行版上。例如
wslpath "C:\\"
退货/mnt/c
但随后我们也遇到了双反斜杠引用问题等。最终,我认为这太老套了,而且可能非常“脆弱”。
我相信你可以在 .NET
ArgumentCompleter
中处理这个wsl
命令。我编写了一个处理 WSL 命令的各种标志的程序,欢迎您将其用作基础。我只是不确定为文件/目录重新编写完成程序会有多困难,但我觉得这不值得付出努力。