Powershell选项卡扩展功能有2个参数,到目前为止的行和“当前字”。该函数应返回当前单词的替换。
从实验中,在我看来,当前单词被传递给函数而没有任何引号,并且返回的单词被插入到具有与原始引用相同的行中。所以,例如,如果我输入
PS> foo "bar"<TAB>
我会将字符串bar
传递给我的标签扩展函数(不带引号),我的返回值将以双引号放回到行中。
此行为在某些情况下会导致问题。例如,部分完成文件名,我可以在其中键入C:\Pro<TAB>
以获取"C:\Program Files"
,但我需要删除最终引用以进一步扩展(例如,通过键入\Micro
然后再次击中TAB。
此外,返回包含引号的扩展值可能非常混乱:
PS> function TabExpansion($line, $lastword) {
PS> "looks like '" + $lastword + "' when quoted"
PS> }
PS>
PS> Silly 'example'<TAB>
这导致报价不平衡。
有没有办法避免或解决这种行为?
保罗。
答案 0 :(得分:1)
首先,这不是真的:
此行为导致问题 某些情况。例如,部分 完成文件名,我在哪里 可能会输入C:\ Pro来获取 “C:\ Program Files”,但我需要 删除要扩展的最终报价 进一步(例如,输入\ Micro和 然后再次击中TAB。
您可以在报价后继续键入\ Micro,它将为您处理。
如果确实需要返回包含引号的值,可以将转义字符(`)注入字符串。请注意,您将需要转义转义字符本身,以免它被吃掉:
function TabExpansion($line, $lastword){
"looks like ``'" + $lastword + "``' when quoted"
}
在Tab扩展后,您的示例将如下所示:
Silly "looks like `'example`' when quoted"
并且解析器应该没有问题。