Powershell选项卡扩展函数有两个参数,一个是到目前为止的行,另一个是“当前单词”。函数应该返回当前单词的替换项。
从实验中,在我看来,当前单词被传递到函数中,没有任何引号,返回的单词被插入到与原始单词相同引号的行中。例如,如果我输入
PS> foo "bar"<TAB>
bar 传递给我的tab扩展函数(不带引号),我的返回值将以双引号放回行中。
bar
这种行为在某些情况下会引起问题。例如,文件名的部分完成,我可以在其中键入 C:\Pro<TAB> 得到 "C:\Program Files" ,但我需要删除最后的引号以进一步展开(例如,通过键入 \Micro
C:\Pro<TAB>
"C:\Program Files"
\Micro
此外,返回包含引号的扩展值可能非常混乱:
PS> function TabExpansion($line, $lastword) { PS> "looks like '" + $lastword + "' when quoted" PS> } PS> PS> Silly 'example'<TAB>
有没有办法避免或避免这种行为?
保罗。
首先,这不是真的:
这种行为会在工作中引起问题 某些情况。例如,部分 可能键入C:\Pro以获取 删除要展开的最终报价 然后再按TAB键。
您可以在报价后继续键入\Micro,它将为您处理。
function TabExpansion($line, $lastword){ "looks like ``'" + $lastword + "``' when quoted" }
选项卡展开后,您的示例将如下所示:
Silly "looks like `'example`' when quoted"
解析器应该没有问题。