【问题标题】:Escaping the $ character in snippets转义片段中的 $ 字符
【发布时间】:2020-09-07 22:03:47
【问题描述】:

这些天我发现自己在做大量的 jQuery,所以我开始将我做的一些常见的事情抽象到 sn-ps 中。我期待与社区分享这些内容,但我现在遇到了问题。

sn-ps 中的文字是通过在文字名称周围添加美元符号 ($) 来定义的,以分隔您要提供的值的去向。这很困难,因为 jQuery 使用美元符号表示法是为了使用它的许多功能。

sn-ps 的转义序列是什么,所以我可以使用美元符号,并且我的 sn-ps 仍然可以工作?

【问题讨论】:

  • 补充说明,但不要忘记您可以使用jQuery 而不是$
  • 注意:这个问题是关于Visual Studio,而不是Visual Studio Code;但是,this particular answer 是关于后者的。
  • 使用 $$item 而不是 $item

标签: visual-studio code-snippets


【解决方案1】:

要获得文字 $,请尝试将其翻倍:$$

【讨论】:

  • 这种方法在使用制表符时仍然保持光标跳转到这个位置。有了这个answer,我可以正确逃脱。
  • 也为我工作! VS2015
  • 适用于 VS2017, C#
  • 在 C#、VS2017 中为我工作。
  • 适用于 VS2019, C#
【解决方案2】:

这是 Visual Studio 代码 的正确方法:\\$

这使得$ 成为sn-p 的文字部分,而不是 $-prefixed construct 的开头。

【讨论】:

  • 这不会弄乱 VSC 中的选项卡。 IE 如果你使用$$ 方法,VSC 假定你想在这些位置做某事。
  • 这应该是公认的答案。在 $variables 之间切换时,当前接受的答案会混乱。
  • @hunt:这是 Visual Studio Code 的正确答案,而问题和接受的答案是关于 Visual Studio
  • 在 2021 年末仍然坚持。
【解决方案3】:

为代码元素定义了一个“分隔符”属性。这默认为 $ 但您可以将其设置为不同的字符,如 ~ 左右。

...

<Snippet>
<Code Language="JavaScript" Delimiter="~"><![CDATA[(function ($) {
    $(document).ready(function () {

    });
})(jQuery);]]></Code>
</Snippet>

...

【讨论】:

  • 不确定为什么这不是公认的答案。 Delimiter指定用于描述代码中的文字和对象的分隔符的属性,其确切目的是在需要时替换$&lt;Code Language="csharp" Delimiter="!"&gt;&lt;![CDATA[Log.Debug(message: $"!end!");]]&gt;&lt;/Code&gt;
【解决方案4】:

虽然 jQuery 响应是有效的,但使用 $ 表示法是一种更好的语法。

我找到了答案:将 $ 字符设为默认值为 $ 的文字。

<Literal Editable="true">

<ID>dollar</ID> <ToolTip>replace the dollar sign character</ToolTip> <Default>$</Default> <Function> </Function> </Literal>

【讨论】:

  • 我发现这在 C# 中可以使用“$”作为 Formattable 字符串类型。
  • 我不确定添加示例是评论还是答案,所以由于篇幅原因,我在下面添加了它。它基于这个答案。
【解决方案5】:

我将它用于 C# 中的可格式化字符串。我从cory-fowler逐字使用了上面的例子:

<Literal Editable="true">
    <ID>dollar</ID>
    <ToolTip>Replace the dollar sign character</ToolTip>
    <Default>$</Default>
    <Function></Function>
</Literal>

用法(为了清晰起见,在 StackOverflow 上添加了换行符,而不是在原文中。)

    string errMessage = $dollar$"Error occurred in
       {MethodBase.GetCurrentMethod().Module}, in procedure
       {MethodBase.GetCurrentMethod().Name}: {ex.Message}".ToString();

谢谢,科里福勒!

【讨论】:

    【解决方案6】:

    我发现上面的cory-fowler 答案很有用,但很沮丧的是,在 VS 2019 中执行 C# sn-p 时预先选择了文字 $...

    它也忽略了我的 $end$ 关键字...

    &lt;![CDATA[string Literal_edit_true = $dollar$"$end$";]]&gt;

    只需更改为 Editable=false 即可解决问题,现在光标出现在 $end$ 准备输入...

    <Snippet>
        <Code Language="CSharp">
            <![CDATA[string Literal_edit_false = $dollar$"$end$";]]>
        </Code>
        <Declarations>
            <Literal Editable="false">
                <ID>dollar</ID>
                <ToolTip>Replace the dollar sign character</ToolTip>
                <Default>$</Default>
                <Function></Function>
            </Literal>
        </Declarations>
    </Snippet>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      相关资源
      最近更新 更多