ChatGPT解决这个技术问题 Extra ChatGPT

如何在 PowerShell 中键入 TAB 字符?

任务:默认情况下,在 Windows 命令提示符中按 TAB 键将输出文件名,而在 PowerShell 中则不执行任何操作。我希望能够在交互模式下键入 TAB 字符,而不是通过脚本。

研究:我在这个网站上和通过 Google 搜索发现了类似的问题。找到的解决方案是解决 Bash (Mac) 或 iterm (Linux),或建议更改为其他程序,例如 TweakUI。我的问题特定于 Windows PowerShell 或命令提示符。

澄清:对您的答案是否适用于我的问题的简单测试是在 PS/CP 中输入 echo "1 TAB-method 2",其中 TAB-method 是您对如何插入 TAB 字符的建议。如果回显给出 1 2(即,1 后跟 TAB 空格,后跟 2)。这就是我要找的。

目前尚不清楚当您按下制表符时您想要发生什么以及在什么情况下发生。如果您只想按照 cmd 完成文件名,它应该已经这样做了。
感谢您的澄清,我想在按 TAB 时将 TAB 字符插入命令提示符屏幕。例如,假设我正在运行一个名为 file.exe 的程序,它需要一个输入,例如 file.exe instring。当我调用程序时,我希望将 instring 作为 TAB。那个插图有帮助吗?

P
Peter Mortensen

如果有帮助,您可以在双引号字符串中嵌入制表符:

"`t hello"

太棒了,这适用于PS!现在,如果我们也能找到命令提示符的解决方案……
注意:`t 在字面上被视为单引号内的两个字符。以防万一您想知道:单引号表示字面意思。
t
tommymaynard

用 [char]9 进行测试,例如:

$Tab = [char]9
Write-Output "$Tab hello"

输出:

     hello

超级喜欢这种方法
上面的示例在 PowerShell ISE 中也可以正常工作。
P
Peter Mortensen

在 Windows 命令提示符下,您可以通过启动它来禁用选项卡完成:

cmd.exe /f:off

然后制表符将回显到屏幕上并按预期工作。或者你可以禁用tab补全字符,或者通过修改注册表来修改tab补全使用什么字符。

cmd.exe 帮助页面对此进行了解释:

您可以使用 /F:ON 或 /F:OFF 开关为 CMD.EXE 的特定调用启用或禁用文件名完成。通过使用 REGEDIT.EXE 在注册表中设置以下 REG_DWORD 值中的一个或两个,您可以启用或禁用计算机上所有 CMD.EXE 调用和/或用户登录会话的完成:HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar 和/或 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar 带有用于特定功能的控制字符的十六进制值(例如 0x4是 Ctrl-D,0x6 是 Ctrl-F)。用户特定设置优先于机器设置。命令行开关优先于注册表设置。如果使用 /F:ON 开关启用完成,则使用的两个控制字符是用于目录名称完成的 Ctrl-D 和用于文件名完成的 Ctrl-F。要禁用注册表中的特定完成字符,请使用空格 (0x20) 的值,因为它不是有效的控制字符。


感谢您的回答,这无需更改注册表即可工作。我能够使用 /f:off 参数和禁用的文件名完成启动。
P
Peter Mortensen

TAB 键在 PowerShell 中具有特定含义。它用于命令完成。因此,如果您输入“getch”,然后输入一个 TAB,它会更改您在“GetChildItem”中输入的内容(它会更正大小写,即使这是不必要的)。

从您的问题来看,TAB 完成和命令完成似乎会使 TAB 键过载。我很确定 PowerShell 设计者不希望这样。


没错,我敢肯定设计师需要分离是有原因的。但是,我需要在 PS 中键入 TAB 字符,并且正如其他链接所建议的那样,bash 和 iterm 确实具有允许将 TAB 作为字符插入的模式。我希望PS中有类似的方式,例如CTRL + V + TAB?
PSReadline (github.com/lzybkr/PSReadline) 现在有点支持这一点 - 您将使用 Ctrl+I 等效于 Tab 但插入该选项卡而不是完成。在某些时候,我会修复它以使其表现得像选项卡一样,但我也会像 bash 一样添加 Ctrl+Q 支持,因此您可以键入 Ctrl+Q,Tab 来插入选项卡。