是我孤陋寡闻了吗? powershell 里面其实支持顺斜杠, tab 补全也能改成顺斜杠

286 天前
 FYFX

最近从 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 工具的命令?

1596 次点击
所在节点    PowerShell
6 条回复
anUglyDog
286 天前
因为一个历史特性恶心了用户 n 多年,对吧。类似的还有个\r\n
geelaw
286 天前
会影响到传统 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 把 \ 改成 / 是否有效。
geelaw
286 天前
喔另外 Win32 的文件 API 是支持 \ 和 / 作为通常的路径分隔符的,实际上自从 MS-DOS 2.0 和 Windows 1.0 开始就一直支持两种方向。

https://retrocomputing.stackexchange.com/a/28348
NoOneNoBody
286 天前
温馨提示,只用一个方向没问题,老早就支持了,但是混用就不可预料了
例如拼接的路径,是有可能会出现混用的
FYFX
286 天前
@geelaw
我理解如果用/区分的命令行参数可能会出问题,不过好像我自己用的很少,基本都是 powershell 这种用 - 的参数,这个补全没问题。UNC path 的话没用过补全, 都是手敲的
vvhy
286 天前
scp 等非交互式 shell 的时候会有问题,得加个判断

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1021188

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX