最近从 linux 换会 windows,感觉 powershell 里面反斜杠有点不爽,后面查了一下 pwsh 是支持顺斜杠的,不过 tab 补全是反斜杠,然后在 github 上面也找到了将 tab 补全改成斜杠的设置
Set-PSReadLineKeyHandler -Chord Tab -ViMode Command -ScriptBlock {
$content = ""
$index = 0
[Microsoft.PowerShell.PSConsoleReadLine]::ViTabCompleteNext()
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref] $content, [ref] $index)
[Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
[Microsoft.PowerShell.PSConsoleReadLine]::Insert($content.Replace('\','/'))
[Microsoft.PowerShell.PSConsoleReadLine]::SetCursorPosition($index)
}
链接是这个: https://github.com/PowerShell/PSReadLine/issues/3205
cd 还有执行程序和.ps1 脚本都没啥问题,不过我也才用,可能会影响一些用到 cmd 工具的命令?
1
anUglyDog 299 天前
因为一个历史特性恶心了用户 n 多年,对吧。类似的还有个\r\n
|
2
geelaw 299 天前 via iPhone
会影响到传统 exe ,但补全导致的通常不会。
考虑 a.exe /b 这里 a.exe 会优先解读 /b 为一个开关、选项。如果写 a.exe \b 则 \b 通常是指当前磁盘根目录下叫做 b 的文件。补全一般会得到带盘符的绝对路径,比如 a.exe C:/b 和 a.exe C:\b ,这两者都只能被解读为路径,所以没问题。 另外我不太懂楼主设置的代码是否只在补全路径的时候才调用——有的时候按 Tab 补全的是参数的范围,此时贸然把 \ 替换为 / 是错误的。此外,还有 UNC path ,我不记得 UNC path 把 \ 改成 / 是否有效。 |
3
geelaw 299 天前 via iPhone
喔另外 Win32 的文件 API 是支持 \ 和 / 作为通常的路径分隔符的,实际上自从 MS-DOS 2.0 和 Windows 1.0 开始就一直支持两种方向。
https://retrocomputing.stackexchange.com/a/28348 |
4
NoOneNoBody 299 天前
温馨提示,只用一个方向没问题,老早就支持了,但是混用就不可预料了
例如拼接的路径,是有可能会出现混用的 |
5
FYFX OP @geelaw
我理解如果用/区分的命令行参数可能会出问题,不过好像我自己用的很少,基本都是 powershell 这种用 - 的参数,这个补全没问题。UNC path 的话没用过补全, 都是手敲的 |
6
vvhy 299 天前
scp 等非交互式 shell 的时候会有问题,得加个判断
|