iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0
自我挑戰組

Bug仔的筆記本系列 第 14

寫一個自己專用的 Code Snippet 程式碼片段

  • 分享至 

  • xImage
  •  

昨天講過一些 Visual Studio 內建的 C# Code Snippet

但實際開發中,你可能有自己常用的程式碼片段,並沒有內建於 Visual Studio 中。

這時候你可以自訂一個專屬於自己的程式碼片段!!!

程式碼片段

Visual Studio 的 Code Snippet 是 XML 格式。以下是格式範例

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title></Title>
        </Header>
        <Snippet>
            <Code Language="">
                <![CDATA[]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

其中 CDATA[] 的括號內就是我們要產生的程式碼內容

例如你想快速產生string messgge = "Hello World"; ,就這樣寫:

<Code Language="CSharp">
    <![CDATA[ string messgge = "Hello World"; ]]>
</Code>

程式碼片段管理員

如果不想重頭寫一份 Code Snippet ,其預設範本都存在 Visual Studio 資料夾內,我們可以用程式碼片段管理員來檢視其位置。

點擊最上方工具->程式碼片段管理員

https://ithelp.ithome.com.tw/upload/images/20220929/201204208qEgeViKL6.png

可以看到各個分類的 Snippet ,與其存放路徑
(ASP.NET這邊好像有bug,資料夾路徑中有 Snippet 檔案,卻沒顯示在畫面中)
https://ithelp.ithome.com.tw/upload/images/20220929/20120420lp0tLlSSh7.png

切換到 CSharp
https://ithelp.ithome.com.tw/upload/images/20220929/20120420XsUGWTNKBn.png

你可以看到 Visual Studio 預設提供 C# 的 Code Snippet 與其資料夾位置。

並且下方有匯入按鈕,只後我們可以用匯入自己寫的 Code Snippet

if.snippet

我們這次看 if 的程式碼片段。在我的電腦中存放路徑如下:
C:\Program Files\Microsoft Visual Studio\2022\Community\VC#\Snippets\1028\Visual C#\if.snippet

其檔案內容應該如下(我稍微調整過排版)

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
	<CodeSnippet Format="1.0.0">
		<Header>
			<Title>if</Title>
			<Shortcut>if</Shortcut>
			<Description>if 陳述式的程式碼片段</Description>
			<Author>Microsoft Corporation</Author>
			<SnippetTypes>
				<SnippetType>Expansion</SnippetType>
				<SnippetType>SurroundsWith</SnippetType>
			</SnippetTypes>
		</Header>
		<Snippet>
			<Declarations>
				<Literal>
					<ID>expression</ID>
					<ToolTip>要評估的運算式</ToolTip>
					<Default>true</Default>
				</Literal>
			</Declarations>
			<Code Language="csharp">
                <![CDATA[   if ($expression$)
                            {
                                $selected$ $end$
                            }
                          ]]>
			</Code>
		</Snippet>
	</CodeSnippet>
</CodeSnippets>

變數

你可以在程式碼中看到三個變數

  1. $expression$ : 你自訂了一個名叫$expression$的變數,每一個自訂變數,需宣告在一組 <Literal> 裡面
  2. $selected$ : 系統保留變數,代表被你選住的東西(看下方動畫會比較清楚)
  3. $end$ : 系統保留變數,代表程式碼片段插入後,最後閃爍的"|"(文字插入點)要停留在的位置

第一個 $expression$ 是你自訂的變數

SnippetType

<SnippetType> 表示你的程式碼片段如何插入,共有三個選項,可以複選

  1. SurroundsWith :允許將程式碼片段放置在所選取程式碼的前後。
  2. Expansion :允許在游標所在位置插入程式碼片段。
  3. Refactoring :指定在 C# 重構期間使用程式碼片段。 Refactoring 無法在自訂程式碼片段中使用。

而我們的 if.snippet 支援 SurroundsWith 和 Expansion。

Shortcut

代表我們程式碼片段 IntelliSense 的關鍵字

實作一個產"方法"的程式碼片段

你可以參考或複製現有的程式碼片段來改寫。作出一個你自己的程式碼片段。

以下是我做的私有方法程式碼片段

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
	<CodeSnippet Format="1.0.0">
		<Header>
			<Title>私有方法</Title>
			<Shortcut>prm</Shortcut>
			<Description>私有方法的程式碼片段</Description>
			<Author>劉長庚</Author>
			<SnippetTypes>
				<SnippetType>Expansion</SnippetType>
			</SnippetTypes>
		</Header>
		<Snippet>
			<Declarations>
				<Literal>
					<ID>type</ID>
					<Default>void</Default>
					<ToolTip>回傳型別</ToolTip>
				</Literal>
				<Literal>
					<ID>name</ID>
					<Default>MyMethod</Default>
					<ToolTip>方法名稱</ToolTip>
				</Literal>
				<Literal>
					<ID>parameter</ID>
					<Default></Default>
					<ToolTip>參數</ToolTip>
				</Literal>
			</Declarations>
			<Code Language="csharp">
				<![CDATA[	private $type$ $name$ ($parameter$)
							{
							 $end$
							}
						]]>
			</Code>
		</Snippet>
	</CodeSnippet>
</CodeSnippets>

接下來在程式碼片段管理員中的 CSharp 分類中,使用匯入

預設會存在My Code Snippets資料夾

https://learn.microsoft.com/zh-tw/visualstudio/ide/code-snippets-schema-reference?view=vs-2022


上一篇
在 Visual Studio 中使用 Code Snippet 程式碼片段
下一篇
寫一個單元測試
系列文
Bug仔的筆記本30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言