107

I find myself doing a ton of jQuery these days, so I started to abstract out some of the common things I do into snippets. I look forward to sharing these with the community, but I'm running into an issue right now.

The literals in snippets are defined by adding dollar signs ($) around the name of the literal to delimit where the value you would like to provide will go. This is difficult because jQuery uses the dollar sign notation in order to use a lot of its functionality.

What is the escape sequence for snippets, so I am able to use the dollar sign, and have my snippets still function?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
cory-fowler
  • 4,020
  • 2
  • 18
  • 29

6 Answers6

180

To have a literal $ try doubling it: $$

Ahmad Mageed
  • 94,561
  • 19
  • 163
  • 174
118

This is the right way for Visual Studio Code: \\$.

This makes the $ a literal part of the snippet rather than the start of a $-prefixed construct.

mklement0
  • 382,024
  • 64
  • 607
  • 775
26

There is an "Delimiter" attribute defined for a Code element. This defaults to $ but you can set it to a different character like ~ or so.

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

    });
})(jQuery);]]></Code>
</Snippet>
gunr2171
  • 16,104
  • 25
  • 61
  • 88
Dirk Seefeld
  • 361
  • 3
  • 3
  • 1
    Not sure why this is not the accepted answer. `Delimiter` is _attribute that specifies the delimiter used to describe literals and objects in the code_ and its exact purpose is to replace the `$` if needed.`<![CDATA[Log.Debug(message: $"!end!");]]>` – mdisibio May 18 '20 at 17:19
8

Although the jQuery response is valid, it's a nicer syntax to use the $ notation.

I've found an answer: Making the $ character a literal with a default value of $.

<Literal Editable="true">

<ID>dollar</ID> <ToolTip>replace the dollar sign character</ToolTip> <Default>$</Default> <Function> </Function> </Literal>
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
cory-fowler
  • 4,020
  • 2
  • 18
  • 29
3

I used this for a formattable string in C#. I used the example above from cory-fowler verbatim:

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

Usage (line breaks are added for clarity on Stack Overflow, not in the original.):

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

Thanks, cory-fowler!

Community
  • 1
  • 1
Joseph Morgan
  • 163
  • 1
  • 9
0

I found the above cory-fowler answer useful, but was frustrated that the literal $ was pre-selected when executing a C# snippet in VS 2019...

Snippet with Literal Editable=true

It was also ignoring my $end$ keyword...

<![CDATA[string Literal_edit_true = $dollar$"$end$";]]>

Simply changing to Editable=false resolved the issue and now the cursor appears at $end$ ready to type...

Snippet with Literal Editable=false

<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>
moon
  • 320
  • 3
  • 10