Escaping the $ character in snippets
Asked Answered
W

6

110

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?

Watchword answered 9/7, 2010 at 18:59 Comment(3)
More of a side note, but don't forget you can use jQuery instead of $Cannell
Note: This question is about Visual Studio, not Visual Studio Code; however, this particular answer is about the latter.Fount
use $$item instead of $itemPhylogeny
C
184

To have a literal $ try doubling it: $$

Colostomy answered 9/7, 2010 at 19:3 Comment(12)
@JosephMorgan It worked for me in C# (VS2015 for reference).Disagreeable
This approach still keep the cursor jumping to this position when tab is used. With this answer I could escape correctly.Rabbinism
@Rabbinism it seems the answer you linked to emphasizes VSC (Visual Studio Code perhaps), so things may have changed between Visual Studio versions.Colostomy
@AhmadMageed my bad. upvoting ;)Rabbinism
Worked for me also! VS2015Slavin
Works in VS2017, C#Thickleaf
Dear downvoters: this question and answer is old. It may not work in today's latest version. Rather than downvote, just upvote another answer that works with VSC or whatever version you're on.Colostomy
Works for me in C#, VS2017.Clarey
Works in VS2019, C#Off
It works but it's not ideal, the next solution should be the approved one to escape "\\$"Weightlessness
Wow man searching for this for so long to escape this inside CDATA in XML and also for code snippet in Visual studioCircumnutate
Still works in VS 2022Defeatism
V
129

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.

Velma answered 15/4, 2017 at 14:49 Comment(5)
This doesn't mess up the tabbing in VSC. IE if you use the $$ approach VSC assumes that you want to do something in those positions.Nutria
This should be the accepted answer. The currently accepted answer messes up when tabbing between $variables.Lcm
@hunt: This is the right answer for Visual Studio Code, whereas the question and the accepted answer are about Visual Studio.Fount
Still holds up in late 2021.Francisfrancisca
This answer is for Visual Studio Code, but the question is about Visual Studio. (Thanks Microsoft for creating that confusion.)Wholewheat
B
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>
Bob answered 25/2, 2013 at 15:31 Comment(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.<Code Language="csharp" Delimiter="!"><![CDATA[Log.Debug(message: $"!end!");]]></Code>Hollyanne
W
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>
Watchword answered 9/7, 2010 at 19:14 Comment(2)
I found that this works in C# for using the "$" for a Formattable string type.Lunation
I wasn't sure if adding an example was a comment or an answer, so because of length I added it below. It is based on this answer.Lunation
L
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!

Lunation answered 1/6, 2016 at 18:40 Comment(0)
P
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>
Parishioner answered 7/9, 2020 at 14:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.