n the first article
of this two-part Visual Studio Snippets series, I introduced snippets, how to use them, and how to create your own, as well as packaging them for distribution. This time, I'll show you some real-world examples by taking 10 existing code clips from DevX
and converting them to snippets that you can use in Visual Studio 2005; for the first two, I'll walk you through the conversion process.
As a brief review, snippet files are simply well formed and valid XML files with a .snippet
extension stored in a location that must be registered with the Snippet Manager in Visual Studio (VS). To distribute snippets, you must include an XML manifest file with a .vscontent
extension that describes the snippet. Finally, you zip both files into a ZIP archive with the extension changed to .vsi
so that the Visual Studio Community Content Installer will process the snippets correctly.
You can create your snippets in any XML IDE. Both MSDN
have a beta-ready Visual Basic .NET snippet editor that you can download here
. Note the download is available only as a collection of source files, so you will have to compile it yourself unless you don't want to actually install it. I've also included a blank template snippet file (template_snippet.snippet
) in the downloadable code
that accompanies this article. You can use that template to get started.
Snippetizing Your Code
Before getting started, you need to understand that you must complete the header elements for each snippet so that the Snippets Manager applet will recognize and display your snippets properly. The header elements for each snippet include a title, author, a description, keywords for future searching features, and a "shortcut phrase" (which is one way to insert a snippet into your code). There is also a helpURL
element that points to any online documentation available for a snippet.
The beginning of your snippets file should look like this, with each element's value changed appropriately for your particular snippet.
Tip 1: Replacing the Last Occurrence of a Substring
<?xml version="1.0" encoding="UTF-8"?>
<Title>Replace Last Occurence of a String</Title>
<Author>Francesco Balena --
Snippetized by Michael Sanchez</Author>
<Description>Replaces only the LAST occurrence
of the SEARCH substring in the SOURCE.
<HelpUrl>Help not available</HelpUrl>
As the first example tip, the following code (see the first article
for more detail) replaces the last occurrence of a given string with a different string. You can place this snippet into a function that would accept three arguments; source, search and a replace string.
The original code I am putting into the snippet is,
Dim ReplaceLast As String
ReplaceLast = StrReverse( _
StrReverse(ReplaceStr), , 1))
You can find the original tip on DevX here
Creating Replaceable Parameters
After creating the header, you'll need to make alterations to parameterized methods so that your snippets support variable parameters. So, to turn this into a snippet, begin by adding an opening <snippet>
element followed by an opening <declarations>
element. This block of code accepts three parameters, so you'll need three corresponding <literal></literal>
The first variable is "Source"the string to search in, so create an <ID> element with a value of Source
. This value represents the highlighted replaceable parameter in the snippet and Visual Studio will insert it into the actual code with dollar signs ($
). Next, create a <Type>
element with a value of String
, which simply declares the data type for this replaceable parameter. Then create a <ToolTip>
element with a value of "Replace with the string to be checked." This tool tip appears when users place the mouse pointer over the respective parameter. Finally, add a <Default>
element of "Visit VB2TheMax.com and VB2TheMax.com." This is a default value that VS inserts into my code wherever it the value of the <ID>
Your literal node should look like the following,
<ToolTip>Replace with the string to be
<Default>"Visit VB2TheMax.com and
The next variable parameter is "Search" which is the string to search for. Create a new <Literal>
node to hold the parameter, and inside it, place:
- An <ID> element with a value of Search. Again, this value represents the highlighted replaceable parameter in the snippet and VS inserts it into the actual code with dollar signs.
- A <Type> element with a value of String to declare the data type for this replaceable parameter
- A <ToolTip> element with a descriptive value. I used "Replace with the string to be searched for."
- A <Default> element and valueI've used "VB2TheMax."
This second <Literal>
node should now look like this:
<ToolTip>Replace with the string to be
Repeat the process with the final "replaceStr" variable, which is the string that should replace the Search variable. This third and final <Literal>
node should look like the following:
<ToolTip>Replace with the string that
replaces the string searched for.</ToolTip>
With the three <Literal>
nodes completed, close the <Declarations>
element and begin the <Code>
element. This is where you place the actual code, embedding the value of the <ID>
elements in place of the variables, and delimiting them with dollar signs ($
Within the <Code>
element, add two attributes. First, the Language
attribute with a value of "VB," and then the Kind
attribute with a value of "function body." These attributes control when the snippet shows up in the Intellisense list. For example, if you were working in a C# project, and press CTL+K+X
to display snippet Intellisense, this particular snippet would not appear, because the language is defined as VB.
element contains your snippet source code, but because source code often includes characters that aren't valid with XML, you need to wrap the code in a CDATA declaration, for example:
<![CDATA[ code_goes_here ]]>
The CDATA tag tells the XML interpreter to not parse the codeto treat it as literal content. After creating the opening CDATA tag, paste in your code and replace the Source
variable with $Source$
, the Search
variable with $Search$
and finally the ReplaceStr
variable with $ReplaceStr$
. This tells Visual Studio to replace those delimited items with the value of your <Default>
element, and to highlight them as replaceable parameters.
Your Code element should look like this:
<Code Language="VB" Kind="function body">
<![CDATA[Dim ReplaceLast As String
ReplaceLast = StrReverse( _
StrReverse($ReplaceStr$), , 1))
After completing the <Code>
element, close your <Snippet>
, and <CodeSnippet>
elements to complete the file. Your snippet should now look like Listing 1
Save this file with a .snippet
extension into the following folder, where <user name>
is your user name.
C:\Documents and Settings\<user_name>\My
Documents\Visual Studio 2005\Code Snippets\Visual
Basic\My Code Snippets.
You can actually store your snippets wherever you like, but you must register that folder with the Snippets Manager. You can do this by pressing CTL+K+B
to open the manager, and then clicking the Add button to add a new folder.