代码之家  ›  专栏  ›  技术社区  ›  Paul Moore

我可以在Powershell选项卡扩展函数中影响报价吗?

  •  2
  • Paul Moore  · 技术社区  · 14 年前

    Powershell选项卡扩展函数有两个参数,一个是到目前为止的行,另一个是“当前单词”。函数应该返回当前单词的替换项。

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

    PS> foo "bar"<TAB>
    

    bar 传递给我的tab扩展函数(不带引号),我的返回值将以双引号放回行中。

    这种行为在某些情况下会引起问题。例如,文件名的部分完成,我可以在其中键入 C:\Pro<TAB> 得到 "C:\Program Files" ,但我需要删除最后的引号以进一步展开(例如,通过键入 \Micro

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

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

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

    保罗。

    1 回复  |  直到 14 年前
        1
  •  1
  •   zdan    14 年前

    首先,这不是真的:

    这种行为会在工作中引起问题 某些情况。例如,部分 可能键入C:\Pro以获取 删除要展开的最终报价 然后再按TAB键。

    您可以在报价后继续键入\Micro,它将为您处理。

    function TabExpansion($line, $lastword){
        "looks like ``'" + $lastword + "``' when quoted"
    }
    

    选项卡展开后,您的示例将如下所示:

    Silly "looks like `'example`' when quoted"
    

    解析器应该没有问题。

    推荐文章