1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VSCodeにスニペットを登録する

Posted at

登録方法

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の文字列に対しても上記の文字列置換を行うことができます。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?