初めに
スニペットとはfor
やswitch
を入力した時に出てくる便利な機能です。
追記:おまけ1として、いくつかのコードスニペットのサンプルをダウンロード出来るようにしています。ご自由にお使い下さい。
作成方法
まず、下準備としてこの拡張機能(Snippet Designer)をダウンロードしてください。
スニペットファイルの作成
完全新規
まず、[ファイル] > [新規作成] > [ファイル]を選択してください。
すると、以下のウィンドウが表示されるので、右上にある「検索 (Ctrl+E)」に「Snippet」を入力。「Code Snippet」が表示されるので選択。(上記の拡張機能がインストールされていないと表示されません)
既存コード
既存のコードをスニペットとして書き出したい場合は書き出したいコードを選択して、Export as Snippet
を選ぶだけです。
スニペットファイルエディターの説明
① ファイル設定
Snippet
ここはスニペットファイル自体の名前になります。後述する「Shortcut」と同じが無難だと思います。因みに、新規にファイルを作成する時に限り、自動でこの名前に置き換わります。
Language
ここはプログラミング言語です。今回は「C++」になります。
Shortcut
ここは名前の通り、入力した際に出てくるキーワードになります。例を上げると、for
のスニペットを書いた時はfor
にしたり、forhoge
にしたりします。勿論、キーワードは自由なのですが「アンダースコア」や「空白」を入れると、候補には出るのですが、書いたコードが出てきません。なので「半角英数字(大文字も含む)だけ」にしてください。いいですか?もう一度言いますよ?「半角英数字(大文字も含む)だけ」にしてください。
私はこのことに気づかず、コード側に問題があるかと思い、小一時間無駄にしました。
② コード
この場所に実際のコードを記入します。
使う際に
- そもそも候補に表示されない
- 候補から選択してもコードが出現しない
- 出現したコードがおかしい
などが発生した場合は大体ここに原因があります。
③ パラメータ設定
ここは「変数」に似たような機能を追加する場所です。というのも、スニペットはショートカットを入力して、固定のコードが作成されるだけではありません。コード中の特定の部分を変更して、作成したい場合もあります。むしろこの方が多いと思います。
なのでここで「変数(パラメーター)」を追加して、動的に変更出来るようにします。
// 例
for (int i = 0; i < length; i++) {}
// の部分の「int」「i」「length」に当たります。
ID
これはいわゆる「パラメーター名」ですが、1つ注意点があります。
- selected
- end
は使用しないようにしてください。というのも、これらの単語は所謂「予約語」に当たる単語になっています。
Tooltip
これは「パラメーター」の説明になります。
Default to
これは名前の通り、「パラメーター」のデフォルト値になります。
Kind
これはよく分からないのですが、通常は「Literal」で大丈夫だと思います。「Object」はどういう時に使うのかは知りません。
Type
これもよく分かりません。この欄をクリックすると自動で「N/A」になるので、それで大丈夫だと思います。
Function
軽く調べてみたところ、既存の関数を呼ぶ欄みたいです。なので、通常は空白にしておくべきです。通常はGenerateSwitchCases
・ClassName
・SimpleTypeName
のみを指定できるみたいです。詳細はこのサイトを見て下さい。
Editable
ここはエディターの時に編集の可不可を設定する欄です。忘れずにチェックマークを付けておきましょう。
実際にスニペットファイルにコードを記入
さて、ここまで理解すれば後は「書き方」だけです。今回は例としてfor
の初期値を変更出来るスニペットファイルを作成してみます。基本はC++の書き方ですが、上記の「パラメーター」の部分は$パラメーター名(ID)$
のという独自の書き方になります。
-
$selected$
は置き換える「パラメーター」が一つだけの際に、「パラメーター」の代わりに$selected$
を使う事で、置き換えることが出来るものです。 -
$end$
はコード スニペットの挿入後のカーソル位置を指定するものです。
for ( $type$ $index$ = $init$; $index$ < $max$; $index$++ )
{
$end$
}
ID | Tooltip | Default to | Kind | Type | Function | Editable |
---|---|---|---|---|---|---|
type | コントロール変数 | size_t | Literal | N/A | ✔ | |
max | 最大の長さ | length | Literal | N/A | ✔ | |
init | 初期値 | 0 | Literal | N/A | ✔ | |
index | インデックス | i | Literal | N/A | ✔ |
これだけです。とても簡単に作成する事が出来ます。
注意点
「パラメーター(ID)」を使う際に、先に「$$」を書いてから、間に「パラメーター名(ID)]を記入する方法だと、パラメーター欄に書いた分の「パラメーターの一部分」が追加されてしまいます。というのも、不足している「パラメーター($で囲んでいる文字)」を自動で追加するお節介機能がある為で、パラメーター欄が大量の「あるパラメーター名の一部分の文字」で埋まる事態が発生しました。
因みに、削除したい「パラメーター」は右クリックでRemove Replacement
を選択すると削除する事が出来ます。
更に、保存・上書き保存する時は結構遅いので注意してください。
プロパティー部分を記入
Author
これはスニペット作成者の名前です。無くても構いません。
Description
これはスニペットの内容に関する説明文です。ここは書いた方が後々分かり易いので書いておくべきです。
Help Url
これはスニペットに関する情報の入手先URLですが、VisualStudioでは使用しないみたいなので、書く必要はないです。
とりあえず、ここまで説明しました。プロパティー欄は個人で使う分にはこれで十分でだと思います。他の内容を知りたい場合はコード スニペット スキーマ リファレンスを覗いてみて下さい。
追加方法
コードスニペットを追加する手段として、3種類あります。
1. 別ファイルに存在するスニペットファイルをインポートする
-
この場合は [ツール] > [コードスニペット マネージャー] を選択します。または、Ctrl+K, Ctrl+Bでも可能です。
-
2 の画面に戻るのでOKを選択。
-
これで完了です。ちなみに、VisualStudioの再起動は不要です。
2. 標準ファイルにスニペットファイルを保存する
この方法は1のやり方で出てきた「My Code Snippets」に直接スニペットファイルを保存する方法になっています。このやり方の利点は毎回「コードスニペットマネージャー」を開いてインポートするといった手間が省かれるという事です。
標準ファイルの場所が「C:\Users\ (ユーザー名)\Documents\Visual Studio 2019\Code Snippets\Visual C++\My Code Snippets」にあります。
3. スニペットファイルが保存されている別ファイルを読み込むファイルにする
この方法は任意の場所に存在するスニペットファイルの保存先を追加する事が出来るので、その方法を使用しています。
- スニペットファイルマネージャーを開きます
- マネージャー内にある「追加」を選択し、スニペットファイルを保存しているフォルダーを選択してください。
- すると、そのフォルダーがマネージャー内に表示されるので、OKを選択して完了です。
この方法の唯一のデメリットが「スニペットファイルの名前がフォルダー違いで同じになる可能性がある」ぐらいでしょうか?これでもし、ショートカットまで同じなら、面倒くさい事になるので注意してください。
- スニペットのショートカットを入力
- ショートカットが表示されるので選択する
- 更に、どのフォルダーのスニペットなのかを選択する
- 確定する
といった手順になってしまいます。
実際に使ってみよう
さて、これで準備は整いました。後は使うだけです。
この通り、標準のfor
スニペットで不満だったのが、初期値を変更出来る自作スニペットを作成して解決しました。
最後に
「コードスニペットって意外と簡単に作れるな~」と思ってもらえれば光栄です。今回はC++でのスニペット作成でしたが、言語設定と実際のコードを変更するだけで別言語でも使う事が可能です。ただし、標準のスニペットファイルの位置は変わりますが、コードスニペットマネージャー内にフォルダーのパスが載っているので、それを参考にしてください。
それでは、快適なプログラミング生活を送りましょ〜
おまけ1
おまけとして、スニペットファイルの一覧を公開しています。
githubからダウンロード出来るようにしています。また、改造なども構いませんので、ご自由にお使いください。
ただし、「README.md」だけは、一切「変更しない・消さない」でお願いします。
おまけ2
標準の中で比較的よく使うスニペットをまとめてみました。なお、標準のスニペットの場所は「C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\VC\Snippets\1041\Visual C++」にあります。
classi
説明
インライン コンストラクター/デストラクターを含むクラスに対するコード スニペット
ショートカット
classi
例
class MyClass
{
public:
MyClass()
{}
~MyClass()
{}
private:
};
for
説明
for ループに対するコード スニペット
ショートカット
for
例
for (size_t i = 0; i < length; i++)
{
}
forr
説明
逆向き for ループに対するコード スニペット
ショートカット
forr
例
for (int i = length - 1; i >= 0; i--)
{
}
rfor
説明
'範囲ベースの for' ループに対するコード スニペット
ショートカット
rfor
例
for (auto& i : v)
{
}
switch
説明
switch ステートメントに対するコード スニペット
ショートカット
switch
例
switch (switch_on)
{
default:
break;
}