最近我一直在使用该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 命令的各种标志,欢迎您将其用作基础。我只是不确定重写文件/目录的补全程序有多困难,但我觉得这不值得付出努力。