我可以在Powershell选项卡扩展功能中影响引用吗?

时间:2010-10-05 11:17:23

标签: powershell tabexpansion

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>

这导致报价不平衡。

有没有办法避免或解决这种行为?

保罗。

1 个答案:

答案 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"

并且解析器应该没有问题。