コードスニペットとは
コードスニペットをコードブロックと呼ぶのではなく、コードテンプレートに変換する方が適切な場合があります。
ここで説明するのは、それほどランダムなことではなく、コードをすばやく生成するためのショートカットであり、これにより、プログラミングの効率を効果的に向上させることができます。
たとえば、C#コードエディターに入力しpropfull
、2つの連続したTab
キーを押してコードを完成させると、次のコードセグメントが自動的に生成されます。
private int myVar;
public int MyProperty
{
get { return myVar; }
set { myVar = value; }
}
エディターでは次のようになります。
カーソルが最初であるint
任意の他のタイプは置き換えられます入力し、位置int
、そしてあなたがすることができますTab
(背景色が黄色である)次の場所に変更可能なキーをスキップし、テンプレートは3つのポジションを提供するように変更することができint
、myVar
同様にMyProperty
。
myVarを変更する場合、「Alt + Enter」または「Ctrl +」を使用して、myVarへの他の参照をすばやく置き換えることができます。
コードの大きなセクションの作成を完了するために数文字を入力するだけで済み、時間を大幅に節約できます。作成したカプセル化属性の数を想像してみてください。これだけで作業が大幅に改善されます。効率。
他のサードパーティの拡張機能や「クイック操作->カプセル化フィールド」を通じて、同様の効果を得ることができます。
以下の図に示すように、Microsoftは多くの言語で多数のコードテンプレートを作成しています。Cに組み込まれたコードスニペットは次のとおりです。
対応するコードスニペットを場所ごとにローカルで見つけることが.snippet
できます。これらはすべてファイルです。メモ帳を使用してpropfull.snippet
ファイルを開きます。中身は次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>propfull</Title>
<Shortcut>propfull</Shortcut>
<Description>属性和支持字段的代码片段</Description>
<Author>Microsoft Corporation</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<ToolTip>属性类型</ToolTip>
<Default>int</Default>
</Literal>
<Literal>
<ID>property</ID>
<ToolTip>属性名</ToolTip>
<Default>MyProperty</Default>
</Literal>
<Literal>
<ID>field</ID>
<ToolTip>支持此属性的变量</ToolTip>
<Default>myVar</Default>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[private $type$ $field$;
public $type$ $property$
{
get { return $field$;}
set { $field$ = value;}
}
$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
このxmlドキュメントを直接変更してコードテンプレートを変更することもできますが、スニペットデザイナーと呼ばれるVisual Studioのビジュアル拡張を使用することをお勧めします。コードテンプレートをより簡単に編集することができます上記の内容の各段落の意味については、後ほど順次紹介します。
Snippet Designerのインストール
Snippet Designerは次の方法でインストールできます。
-
Visual Studioの拡張機能マネージャーで、インターネット検索からSnippet Designerを直接ダウンロードします。インストール後に再起動する必要があります。
-
https://marketplace.visualstudio.com/items?itemName=vs-publisher-2795.SnippetDesignerでSnippetDesigner.vsix をダウンロードします。ダウンロードが完了したら、ダブルクリックしてインストールします。インストール中は、開いているVSインスタンスは存在できません。
-
ソリューションをGithubにダウンロードして、自分でコンパイルしてインストールすることもできます。ウェアハウスのアドレスは、https://github.com/mmanela/SnippetDesignerです。
「メニュー->ツール->オプション->拡張」で「拡張の同期自動読み込みを許可する」をチェックする必要があることに注意してください。チェックしない場合、VS2019はこの拡張をまったく使用できません。
スニペットデザイナーの機能
Githubの紹介ドキュメントによると:
.snippetファイルを開くか、[ファイル]-> [新規]-> [ファイル]-> [コードスニペットファイル]を選択してアクセスします。
つまり、最初に、次のようになっているはずの新しいファイルを作成して、スニペットファイルを作成できます。
実際、私のものはこのようなもので、何もありません:
コードを作成するのと同じ環境でスニペットを作成できるように、ネイティブのVisual Studioコードエディターを使用します。
後で説明するように、これは問題ありません。通常のドキュメントと同じようにコードを記述してください。
便利な右クリックメニューを使用して、簡単に代替品にマークを付けることができます。
これは問題ありません。テンプレートを編集するときに、置換するコンテンツを選択します。次に示すように、右クリックメニューに[置換する]オプションがあります。
Visual Studioのプロパティウィンドウ内にスニペットのプロパティが表示されます。
実際、以下に示すように、プロパティウィンドウも提供されます。
[表示]-> [その他のウィンドウ]-> [スニペットエクスプローラ]にあります。
以下に示すように、「メニュー->表示->その他のウィンドウ->スニペットエクスプローラ」を開くことができます。
次のようになります。
そして、私がVS2019の下で開いたのは、次のようなものです:
このツールウィンドウには、ファイルを開かずにスニペットを確認できるコードプレビューウィンドウが含まれています。
「メニュー->ツール->コードスニペットマネージャー」ウィンドウはクイックプレビュー機能を提供しますが、この拡張機能とは何の関係もありません。
クイック検索のためにコンピューター上のスニペットのインデックスを維持します。
すべてのスニペットファイルは、迅速にアクセスできるようにマシン上でインデックスが作成されていますが、そうであるかどうかはわかりません。
使用、編集、または削除するコードスニペットをすばやく見つける方法を提供します。
とにかく、「スニペットエクスプローラー」機能はしません。インストールの完了後、最初に「Visual Studioは一部の拡張機能を同期的に読み込めません」というメッセージが表示され、次にツールオプションに手動で移動し、[同期読み込みを許可]をチェックして、「VS拡張機能の読み込み中に古いAPIを呼び出すことはできません。」
スニペットデザイナーは、Visual Studio 2015、2017、2019をサポートしています。
VS2019をサポートするのは良いことではありませんか?偽のVS2019 Enterprise Editionをインストールしますか?
スニペットデザイナーの詳細な紹介
私のVS2019は上記で紹介したすべての機能を使用できるわけではありませんが、ここに存在するハンサムな男や美女がすべて使用できない、または他のバージョンのVSを安定してサポートできるという意味ではありません。
私の目標は、常にコードテンプレートを記述してプログラミングの効率を上げることです。彼が提供した機能が私のマシン環境では基本的に使用できないので、私はそれについて説明しません。この問題を解決する大きな人がいれば、どうぞ教えてください、私は学びます。
しかし、間違いなく使用できるとは記載されていない関数があるので、この関数を使用してコードテンプレートの作成方法を説明し、システムの組み込みテンプレートを確認した後でまとめました。
任意のコードファイルでコードの一部を選択し、右クリックメニューで[スニペットとしてエクスポート]を選択できます。
つまり、このコードをコードテンプレートに変換して、次のようなウィンドウにジャンプするつもりです。
最初に少し変更を加え、次に説明します。
赤枠部分と緑下部分の両方が私たちによって変更されています。「コードスニペットマネージャー」を通じて、対応する説明フィールドに簡単に対応できます。これ以上説明する必要はありません、誰もが理解しているので、言及する価値があります。はい、スニペットを保存するファイルの名前は任意の名前にすることができますが、見つけやすいようにショートカットと同じにすることをお勧めします。次に、最も重要な部分について説明します。
- ショートカット:ショートカット、これは
tryccf
、つまり、コードエディタtryccf
でこのショートカットをタップしてから2回Tab
完了すると、上記と同じ内容を完全に表示できます。定義したショートカットや他のショートカットが重い場合、それをコードエディターで使用すると、選択ボックスがポップアップし、目的のコードテンプレートを選択できます。 - $ selected $:「コードのセクションを選択->右クリックメニュー->フラグメント->外部コード->対応するコードセクションを選択」を選択すると、選択したコードが
$selected$
定義された場所にラップされます。 - $ end $:編集可能な領域がない場合、コードスニペットが生成
$end$
された後、カーソルはこの定義された位置にあります。 - ID:テンプレートの$に含まれるプレースホルダーとの1対1の対応ですが、$記号をここに記述する必要はありません。
- ツールチップ:対応する場所の具体的な指示。
- デフォルトは:関数が定義されていないか、関数が値を計算できない場合、対応するプレースホルダーはここで文字列に置き換えられます。
- 機能:ここでは2つしか見つかりません。1つは
ClassName()
コードが配置されているクラスの名前でプレースホルダーを置き換えるもので、もう1つはSimplyTypeName(global::完整类名)
プレースホルダーを対応するクラスで置き換えるものです。たとえば、ここではを使用していSimpleTypeName(global::System.OverflowException)
ます。 - 編集可能:オンにすると、領域を編集できることを示します。コードスニペットが生成されたら、
Tab
キーを介して対応するプレースホルダーの領域にすばやくジャンプできます。背景色は黄色です。
- 置換区切り文字:デフォルトは$です。他の記号も使用できます。この記号の2つで囲まれた文字列はプレースホルダーと見なされます。
変更が完了したら、スニペットファイルを保存できます。デフォルトでは、MyCode Snippetsに対応するディレクトリに保存されます。そのため、保存後にコードスニペットマネージャーを直接表示でき、定義したショートカットからコードエディターを直接開くこともできます。使用。また、お気に入りのディレクトリに保存して、インポート機能で追加することもできます。
メモ帳を使用して、作成した新しいスニペットファイルを開くことができます。内容は次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Keywords>
<Keyword>
</Keyword>
</Keywords>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
<AlternativeShortcuts>
</AlternativeShortcuts>
<Title>代码模板示例</Title>
<Author>青梅酒熟凭卿醉</Author>
<Description>本示例演示了所有内容</Description>
<HelpUrl>
</HelpUrl>
<Shortcut>tryccf</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal Editable="true">
<ID>Program</ID>
<ToolTip>代码所在类名</ToolTip>
<Default>DefaultClassName</Default>
<Function>ClassName()</Function>
</Literal>
<Literal Editable="false">
<ID>ConsoleWriteLine</ID>
<ToolTip>在控制台输出信息</ToolTip>
<Default>Console.WriteLine</Default>
<Function>
</Function>
</Literal>
<Literal Editable="true">
<ID>OverflowException</ID>
<ToolTip>溢出异常</ToolTip>
<Default>Exception</Default>
<Function>SimpleTypeName(global::System.OverflowException)</Function>
</Literal>
<Literal Editable="true">
<ID>Exception</ID>
<ToolTip>通用异常类</ToolTip>
<Default>Exception</Default>
<Function>
</Function>
</Literal>
</Declarations>
<Code Language="csharp" Delimiter="$" Kind="method body"><![CDATA[try
{
// Do something
$selected$
}
catch ($OverflowException$ ex)
{
$ConsoleWriteLine$(nameof($Program$));
$ConsoleWriteLine$(ex.StackTrace);
}
catch ($Exception$ ex)
{
$ConsoleWriteLine$(ex.Message);
}
finally
{
// Dispose
$end$
}]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>