登録方法
File -> Preferences -> User Snippets を選択する
適用する言語を選択する。すべての言語に適用したい場合は " New Global Snippets file" を選択する。
記載方法
JSONフォーマットで記述する
Cのスタイルのコメントが利用可能
登録するスニペットの数に制限はない
記述形式
{
< snippet name >:{
"prefix":< trigger words >,
"body":< contents >,
"description":
}
}
< snippet name >:スニペット名
< trigger words >:スニペットを呼び出すためのトリガとなる文字列。複数指定する場合はリストで記載。
< contents >:スニペットの中身。ここに記載したものがコードとして貼り付けられる。
< description >:スニペットの説明。保管候補とともに表示される。
記述例
{
// copyright
"copyright":{
"prefix":"copyright",
"body":"// Copyright (C) $CURRENT_YEAR xxx inc. - All rights reserved",
"description":"コピーライト"
},
// include guard
"IncludeGuard":{
"prefix":"IncludeGuard",
"body":[
"#ifndef ${TM_FILENAME/([\\.]*)(\\w+)/${1:+_}${2:/upcase}/g}",
"#define ${TM_FILENAME/([\\.]*)(\\w+)/${1:+_}${2:/upcase}/g}",
"$1",
"#endif\n"
],
"description":"インクルードガード"
}
}
bodyの記述で使える記法
bodyの記述で使用できる記述について解説します。
Tabstops
$1
, $2
のように $+数字
の形式の記述をすると、スニペットの内容を張り付けた後のカーソルの位置を指定することができます。例えば上記のinclude guardの記述例では、#defineの行と#endifの行の間の行にカーソルが移動します。
複数のTabstopsを記述した場合、最初に一番小さな数字を指定した位置にカーソルが移動し、Tabキーを押すごとに数字の小さい順にカーソルが移動します。また、"$0" は例外で最後にカーソルが移動する位置となります。
Placeholders
${1:aaa}
のように記述すると、Tabstopに値を指定することができます。
例えば下記のように指定することで、スニペットを張り付けた後に、容易にarg1, arg2, arg3の値を変更することができるようになります。
"func(${1:arg1},${2:arg2},${3:arg3});"
Placeholderは${1:another ${2:placeholder}}
のようにネストして記述することもできます。
Choice
${1|a,b,c|}
のように記述すると、Placeholderの値を選択肢から選べるようになります。
Variables
$
に続けて以下の文字列を指定すると、変数の値を張り付けることができます。
変数値が設定されていない場合は、デフォルト値が空白が入力されます。
変数名 | 説明 |
---|---|
TM_SELECTED_TEXT | 選択中の文字列 |
TM_CURRENT_LINE | 現在カーソルのある行の内容 |
TM_CURRENT_WORD | 現在カーソルのある単語の内容 |
TM_LINE_INDEX | 現在カーソルのある行の行番号(0オリジン) |
TM_LINE_NUMBER | 現在カーソルのある行の行番号(1オリジン) |
TM_FILENAME | 編集中のファイル名 |
TM_FILENAME_BASE | 編集中のファイル名から拡張子を除いた文字列 |
TM_DIRECTORY | 編集中のファイルが存在するディレクトリの名前 |
TM_FILEPATH | ファイルのフルパス名 |
CLIPBOARD | クリップボードの中身 |
WORKSPACE_NAME | 現在開いているワークスペースかフォルダの名前 |
WORKSPACE_FOLDER | 現在開いているワークスペースかフォルダのパス |
CURRENT_YEAR | 現在時刻の年 |
CURRENT_YEAR_SHORT | 現在時刻の年(下2桁) |
CURRENT_MONTH | 現在時刻の月(2桁表示) |
CURRENT_MONTH_NAME | 現在時刻の月(英語表記) |
CURRENT_MONTH_NAME_SHORT | 現在時刻の月(英語短縮表記) |
CURRENT_DATE | 現在時刻の日(2桁表示) |
CURRENT_DAY_NAME | 現在時刻の曜日(英語表記) |
CURRENT_DAY_NAME_SHORT | 現在時刻の曜日(英語短縮表記) |
CURRENT_HOUR | 現在時刻の時(24時間表記) |
CURRENT_MINUTE | 現在時刻の分 |
CURRENT_SECOND | 現在時刻の秒 |
CURRENT_SECONDS_UNIX | Epoch Unix Time Stamp |
BLOCK_COMMENT_START | コメントの開始。言語仕様に従って入力される。 |
BLOCK_COMMENT_END | コメントの最後。言語仕様に従って入力される。 |
LINE_COMMENT | インラインコメント。言語仕様に従って入力される。 |
Variable transforms
変数の値に対して、正規表現を用いて文字列置換を行うことができます。
例えば以下のように記述すると、ファイル名から拡張子を除いた文字列が入力されます。
${TM_FILENAME/(.*)\\..+$/$1/}
また、上述の記述例のIncludeGuardのbodyでは以下の記述で "." から "_" への変換と小文字を大文字に変換を行っています。複数の処理内容は分けて書きたいのですが、BNFを見た感じ、そのような記述はできないようです。
${TM_FILENAME/([\\.]*)(\\w+)/${1:+_}${2:/upcase}/g}
Placeholder transform
Placeholderの文字列に対しても上記の文字列置換を行うことができます。
参考