【问题标题】:Can I affect quoting in a Powershell tab expansion function?我可以影响 Powershell 选项卡扩展功能中的引用吗?
【发布时间】:2010-10-05 11:17:23
【问题描述】:

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

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

PS> foo "bar"<TAB>

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

这种行为在某些情况下会导致问题。例如,文件名的部分补全,我可能输入 C:\Pro&lt;TAB&gt; 以获取 "C:\Program Files",但随后我需要删除最后的引号以进一步扩展(例如,通过输入 \Micro 然后再次按 TAB。

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

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

这会导致引号不平衡。

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

保罗。

【问题讨论】:

    标签: powershell tabexpansion


    【解决方案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"
    

    解析器应该没有问题。

    【讨论】:

    • 感谢关于转义字符的建议。
    • 另外,删除引号是对的。看起来我看到的不当行为是 PowerTab 中的一个错误 :-( 现在,我将回到标准选项卡扩展,看看是否更好。
    • 我想我将在 PowerTab 0.99.6 中修复所有引用问题。整理起来很烦。
    猜你喜欢
    • 2023-03-10
    • 2023-03-28
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 2010-11-12
    • 2015-02-23
    • 1970-01-01
    • 2019-09-14
    相关资源
    最近更新 更多