2

Powershell 选项卡扩展函数采用 2 个参数,即到目前为止的行和“当前单词”。该函数应返回当前单词的替换。

从实验来看,在我看来,当前单词没有任何引号传递给函数,并且返回的单词被插入到与原始单词相同的行中。所以,例如,如果我输入

PS> foo "bar"<TAB>

我将把字符串bar传递给我的标签扩展函数(不带引号),我的返回值将放回双引号中。

在某些情况下,此行为会导致问题。例如,文件名的部分完成,我可能会在其中键入C:\Pro<TAB>get "C:\Program Files",但随后我需要删除最后的引号以进一步扩展(例如,通过键入\Micro然后再次按 TAB.

此外,返回包含引号的扩展值可能非常混乱:

PS> function TabExpansion($line, $lastword) {
PS>    "looks like '" + $lastword + "' when quoted"
PS> }
PS>
PS> Silly 'example'<TAB>

这会导致报价不平衡。

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

保罗。

4

1 回答 1

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"

解析器应该没有问题。

于 2010-10-05T18:19:09.427 回答