Posted at

Visual Studio 2013 でコードスニペットを使えるようにしてみた

More than 3 years have passed since last update.

作業効率化のため、Visual Studio 2013 でコードスニペットを作ってみました。

今回は、以下の様なコードを自動生成するスニペットを作ります。

namespace test {

} // namespace test


スニペットファイルを作る

まずは、スニペットを記入するためのファイルを作ります。


  1. Visual Studio の

    「ファイル > 新しいファイル」

    を選択します。


  2. 「全般 > XML ファイル」

    を選択し、「開く」をクリックします。

  3. このファイルの拡張子を *.snippet に変更して、ファイルを保存します。

    (今回は、my_namespace.snippet としました。)

この手順を見て分かる通り、スニペットファイルは XML で記述します。


ヘッダーを記述する

次に、最低限必要になるヘッダー部分を記述します。


my_namespace.snippet

<CodeSnippet Format="1.0.0">

<Header>
<Title>my_namespace</Title>
<Shortcut>ns</Shortcut>
</Header>
</CodeSnippet>

この内、重要なのは以下の2つのタグです。

タグ名
概要

Title
スニペットの名前。
コードスニペットマネージャにはこの名前で表示されます。

Shortcut
スニペットを呼び出すための名前。
Intellisense で表示されます。


コードを記述する

最後に、挿入するコードを記述します。


my_namespace.snippet

<?xml version="1.0" encoding="utf-8"?>

<CodeSnippet Format="1.0.0">
<Header>
<Title>namespace</Title>
<Shortcut>ns</Shortcut>
</Header>
<Snippet>
<Code Language="CPP">
namespace test {
} // namespace test

</Code>
</Snippet>
</CodeSnippet>


<Code> タグの値に挿入したいコードを記入します。

Language には、挿入するコードの言語を指定します。

ここに指定する文字列は

http://msdn.microsoft.com/ja-jp/library/ms171418.aspx#code

の Language 属性値に載っています。

これで準備は整いました。


Visual Studio に登録して、使ってみる。

では、実際にスニペットを登録して使ってみます。


  1. Visual Studio の

    「ツール > コードスニペットマネージャー」

    を選択します。


  2. 「インポート」をクリックして、先ほど作ったスニペットファイル(my_namespace.snippet)を開きます。


  3. 「Visual C++ コードスニペット」に先ほど開いたファイルが表示されていることを確認します。


  4. 「場所」「My Code Snippets」にチェックを入れ、「完了」をクリックします。


  5. 「コードスニペットマネージャー」「My Code Snippets」に先ほど追加したスニペットが追加されていることを確認します。

これでスニペットが使えるようになりました。

試しに「ns」と打ち込むと、Intellisense に「ns」が表示されているはずです。

ちなみに……

今回行った「インポート」は所定の位置に *.snippet ファイルをコピーするだけですので、既に所定の位置にあるスニペットファイルはインポートの必要はありません。

今回の例では

C:\Users\[user_name]\Documents\Visual Studio 2013\Code Snippets\Visual C++\My Code Snippets

にコピーされていると思います。


コードの一部を指定したものに置き換える

さて、無事にスニペットが使えるようになりましたが、名前空間の名前は自由に指定できないと不便でなりません。

というわけで、名前空間の名前を自由に入力できるようにしてみます。


my_namespace.xml

<?xml version="1.0" encoding="utf-8"?>

<CodeSnippet Format="1.0.0">
<Header>
<Title>namespace</Title>
<Shortcut>ns</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>name</ID>
<Default></Default>
</Literal>
</Declarations>
<Code Language="CPP">
namespace $name$ {
} // namespace $name$

</Code>
</Snippet>
</CodeSnippet>


<Code> タグの名前の部分が $name$ に置き換わっていますが、

これは <Declarations \ Literal \ ID> タグの値の name のことを指しています。

今回重要なのは、<Literal> タグの中身です。

タグ名
概要

<ID>
置き換え場所を指定するためのリテラル名を入れます。

<Default>
リテラルのデフォルト値を指定します。
何も指定しない場合は今回のように何も記述しません。

これでスニペットを呼び出すと、名前の部分が編集可能になります。


最後に

今回は、必要最小限の記述でコードスニペットを作成しました。

コードスニペットのタグやリテラルは他にもありますので、自分でも調べてみてください。


参考サイト