Loading...
Fleshian avatar Fleshian 379 Точки

[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

Тагове:
60
Programming Basics
Yulia avatar Yulia 1346 Точки

Благодарим за старателно подготвената тема, колега :) Във форума има вече теми за снипети (пример), но смятам, че тази е най-полезна и изчерпателна. Ще добавя само линковете и към други теми, свързани с улесняването на работата с Visual Studio, за да бъде по-достъпно от едно място, защото те са леко "изгубени" сред страниците на форума, но също толкова полезни:

Полезни клавишни комбинации в VisualStudio

Visual Studio Tips and Tricks

5
Ludmil.D avatar Ludmil.D 41 Точки

аз ползвам този вариант : 
cri (tab tab) = int.Parse(Console.ReadLine());
пишеме долното във текстов фаил при  save as даваме filename.snippet
в surch-a на VS  пишем "code snippet" - > import във Visual C#



<CodeSnippets
xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Console ReadLine</Title>
<Shortcut>cri</Shortcut>
</Header>
<Snippet>
<Code Language="CSharp">
int.Parse(Console.ReadLine());
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>

p.s. весел яйце чук
4
Yulia avatar Yulia 1346 Точки

A аз направо си свалих снипети за всички типове данни (намерени във форума на Академията).
Примерно int (Tab-Tab) --> int x = int.Parse(Console.ReadLine());
Може би е някаква висша степен на мързел, ама много ме кефят :D Направила съм си снипети даже за кода за запетайката (с InvariantCulture) и други глезотии. Ако му трябват на някой, мога да му ги пратя по скайп :)

6
Fleshian avatar Fleshian 379 Точки
Да така кода е доста по-опростен, за снипети без функции в тях това ще е най-сбития код. Аз добавих всичките неща като
0
iordanrujinov avatar iordanrujinov 1 Точки

Поиграх си малко със snippet-ите и забелязах, че с твоят код става много лесно създаването на snippet-а , но при създаването на Console.ReadLine(); отминава цял ред и курсора не беше там където исках, за това дописах 1 ред код , който ми оставя курсора в скобите както е при Console.WriteLine(тук); и не оставя празен ред отгоре.

<CodeSnippets
xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>Console ReadLine</Title>
      <Shortcut>cr</Shortcut>
    </Header>
    <Snippet>
       <Code Language="CSharp"><![CDATA[Console.ReadLine($end$);]]>
      </Code>

    </Snippet>
  </CodeSnippet>
</CodeSnippets>

Чрез $end$ избираме къде да свърши програмата.

0
08/02/2018 23:04:09
Yulia avatar Yulia 1346 Точки

↑ Up-вам темата, защото на асистенстването днес забелязах, че има хора, които не знаят какво са снипети, колко могат да ни улеснят живота и особено факта, че може да си ги правим сами :} А сега тези теми са много потънали назад из форума.

Препоръчвам също така да си улесните живота (и постоянното тестване на задачите) като с едно редче на C# си пренасочите входа на програмата - да е от текстов файл:

Копирате си някой oт нулевите тестове в input.txt файл и си го слагате в папката на solution-a, след което само задавате този път в един StreamReader и го ограждате с един #if DEBUG / #endif -> това "пази" да не ви гръмне програмата в Judge-a, защото работи само докато се дебъгва. Може да си насложите всичките предварително - като си ги закоментирате. Да вметна и само, че трябва да се добави и едно using.System.IO за stream-а. Това наистина може да ви спести много време, заедно с подходящи снипети, за да може да се съсредоточите най-вече върху решаването на задачите, а не да пишете тривиални неща.

#if DEBUG
        Console.SetIn(new StreamReader("../../input.txt"));
#endif
11
alevtodorov avatar alevtodorov 29 Точки

Това е супер полезно. Много мерси, че го сподели

0
dZf1aeA-KlimentHristov avatar dZf1aeA-KlimentHristov 56 Точки

Много благодаря, не бях се замислил, че може да е толкова лесно писането на код :)))) 

 

0
NMishev avatar NMishev 2 Точки

Доста полезно, благодаря! :)

0
KOSTADINMARKOV avatar KOSTADINMARKOV 22 Точки

Снупетите найстина са много полезни за изграждането и оформлението на един добър и добре четип сорс код.Ако искаш още по подробна информация за снипетите ти препоръчвам на изгледаш това видео https://www.google.bg/url?sa=t&rct=j&q=&esrc=s&source=video&cd=4&cad=rja&uact=8&ved=0ahUKEwioiPjtlLTLAhUChSwKHWyaD-8QtwIIIzAD&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DYJQGKBGqTC0&usg=AFQjCNG2bVhz8peoyk5ESZqys1--ipD1lA.

0
GeorgiGG avatar GeorgiGG 6 Точки

Много полезна и изчерпателна тема - чувал съм, че повечето програмисти са мързеливи хора и затова измислят всичките облекчения :)

Погледнато сериозно единствения проблем, който може да дойде е, ако седнем да друг компютър - трябва да имаме копие на нашите команди, иначе ще ни е доста неудобно, ако сме свикнали да ги ползваме. Понеже доста време работя с AutoCAD там е същия проблем - може да си дефинираш хиляди собствени команди, но ако ги забравиш и си на друга машина е тегаво.

0
Tsekotsolov avatar Tsekotsolov 12 Точки

Благодаря!

0
GeorgiPopov avatar GeorgiPopov 3 Точки

Здравейте колеги!
Много полезна тема! Благодарности и от мен!

Ето още един готин и много лесен вариант за създаване на снипети, има видео в YouTube как се ползва ако се затрудните.
https://marketplace.visualstudio.com/items?itemName=vs-publisher-2795.SnippetDesigner

0
Bullsized avatar Bullsized 153 Точки

удряйте си по едно $end$ там, където искате да ви е курсор блинка след употреба на снипета, например ако
cr таб таб ви изкарва Console.ReadLine(); директно след точката и запетаята да ви излиза курсора, за да можете
директно да натиснете ентър и да слезете на долния ред ;) 

it'z the little thingz :)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.