[Useful Info] C# Basics - Създаване на Code Snippets във Visual Studio

Предполагам много от вас ползват code snippet командите в Visual Studio, cw-tab-tab изкарва Console.WriteLine() for-tab-tab създава целия for цикъл и с щракане на tab може да си сменяш името на брояча или да му кажеш до кога да се върти. Снощи както си разцъквах задачи в Visual Studio-то и видях че в менюто Tools има едно нещо кеото се казва Code Snippet Manager. И надъхания програмист бам в Гугъл: "how to create code snippets in Visual Studio tutorial" :D. Четах, гледах маех и накрая разбрах как се създават собствени клавишни комбинации които при tab-tab ти изписват това което искаш.
Снощи до 4 сутринта съм си правил снипети :D. Направих си "cr" да ми изписва Console.ReadLine(); "ca"
и "cl" съответно са "Create array" и "Create List" както и други които сметнах че ще са ми полезни. Какво по-яко от това да споделиш с надъханите колеги как и те да си направят собствени (междувремнно и да се получи някой друг плюс :D). След малкта предистория да започнем по същество!  :)

Процедура за създаване на Code Snippet:

Създване на файл
Създавате  нов .xml файл. File - New - File или  (ctr + N), от менюто "General" си избирате
"XML File" 

Тук следва празна бланка за това какво трябва да съдържа файла плюс коментари за обяснение. Копие на бланката тук.

<?xml version="1.0" encoding="utf-8" ?> 
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/CodeSnippet">
    <CodeSnippet Format="1.0.0">

        <!-- The header contains information describing the snippet. -->
        <Header>
          
          <!-- The Title of the snippet, this will be shown in the snippets manager. -->
          <Title>cr</Title>

<!-- The set of characters that must be keyed in to insert the snippet. -->
<Shortcut>cr</Shortcut> <!-- The description of the snippet or the information that will be shown in the IntelliSense manager. --> <Description>Inserts an Apex Notifying Property.</Description> <!-- The author of the snippet. --> <Author>Deyan Dachev</Author> <!-- The set of snippet types we're dealing with - either Expansion,
SurroundsWith or both. --> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <!-- Now we have the snippet itself. --> <Snippet> <!--Here we put all our functions(moving between tabs like moving between
name and counter value in the for-tab-tab snippet) -->
            <Declarations>
<Literal>
<ID>Name of function</ID>
<ToolTip>Information shown on mouse hover</ToolTip>
<Default>Default value of the function</Default>
</Literal>
<Literal>
<ID></ID>
<ToolTips></ToolTips>
</Literal>
</Declarations>
<!-- Sepecify the code language and the actual snippet content. --> <Code Language="CSharp" >
<!-- <![CDATA[Your code goes here]]> --> <![CDATA[Console.ReadLine();]]> </Code> </Snippet> </CodeSnippet> </CodeSnippets>

За да стане по ясно как да попълните бланката можете да разгледате някой от файловете които създадох:
1. ipr - int name = int.Parse(Console.ReadLine());  // нов int чакащ вход от потребителя
2. ca -  type[] name  = new type[size];    // създава нов празен масив
3. cl  - List<type> name = new List<type>(); //  създава нов лист от  вид променлива
4. str - string name = Console.ReadLine();  //  нов стринг чакащ вход от usera
Също така можете да разгледате как са написани вградените snippet-и, като заредите .snippet файловете в VS или друг текстов редактор. Директорията на вградените snippet-и съм написал малко по-долу.

Програмна част.
Единственото "програмиране" което има в целия код е местата които можете да попълвате
с натискане на tab. За да се създадът функци на тези места, ID-тата им(които си измисляте вие) се ограждат със две доларчете: $name$ ,$type$, $size$ или др. След това в <Declarations> блока трябва да въветедет <Literal> който да слага някаквa default стойност на тези места. Най-добре погледнете пейстовете които съм дал по-горе за да стане по ясно. Има две други функции които са вградени в XML и няма нужда да бъдат записвани в отделен <Literal> таг. Едната е $end$ която казва: като си напишеш всички таб функции(ако има такива) и натиснеш "enter" курсорът ще отиде на това място. Другата е $selected$ която не ми стана напълно ясно как действа но и не ми се наложи да я ползвам. Моля ако има някакви въпроси по кода да питате :).

Запазване на файла.
След като си напишем кода трябва да си запазим файла като snippName.snippet. Директория в която се съдържат вградените Code Snippet-и е D:\Visual Studio 2013\VC#\Snippets\1033. Аз си създадох една папка  \Snippetes\MySnipps  в която запазих всичките файлове. Те могат да са където и да е в компютъра ви, но мисля че е най-добре да са в директорията на VS.

Вграждане в VS.
За да вкараме shortcut комбинацията в IntelliSense на VS отиваме в Tools - Code Snippet Manager - Import - избираме си .snippet файла който да вкараме и Finish.

Party time!
Вече си имаме собствени shortcut комбинации които да ползваме когато си пожелаем! :).
Всякакви въпроси , неяснотии по създаването на файла и feedback са добре дошли!
Ако на някой му харесват моите Code Snippet-и може да изтегли архив от тук.

Best Regards, Деян Дачев :)

P.S Попринцип има plugins с които могат да се създават code snippet-и по-лесно, но лично за мен е много по удовлетворяващо да си ги направя сам.
P.P.S Тепърва ще почвам да редактирам поста от правописни грешки и подобни , така че да не ви прави впечатление. :D