Snippets (スニペット)
スニペットとははドキュメントに挿入するテキストです。スニペットには、時間、(選択されたテキストのような)変数、タブストップやあなたが挿入後タブを使う欠けている情報のためのプレースホルダを挿入したり、プレースホルダに入力したデータの変更を実行するコードを含むことができます。
Plain Text (プレーンテキスト)
もっとも単純な場合は、あなたが何度も何度も入力したくないテキストを挿入するスニペットを使う事が来ます。あなたが、何度も入力したり、実際に入力するテキストを覚えているのが大変だからといった理由でです。例えばあなたの銀行口座の詳細やAppleの修飾キーのHTMLの実体参照などがあります。
もしあなたがプレーンテキストを挿入するスニペットを使う際に知っていなければいけないことは、$
と`
は予約語であるということです。もしあなたがそれらを入力したい場合は、( \$
のように)その語の前に置いてエスケープしてください。この二文字が後ろにないエスケープ(つまり他のエスケープにが後ろにくる)エスケープはリテラル文字として挿入されます。
Variables (変数)
あなたは、$
と一緒に変数名をつけることによって変数の値を入力することもできます。全ての普通の動的な変数はサポートされています。おそらく一番役に立つはTM_SELECTED_TEXT
です。例えばもし、LaTexの\textbf
コマンドで選択範囲を包み込むスニペットを作りたければ、以下のようにすればできます。
\textbf{$TM_SELECTED_TEXT}
もしテキストが選択されていない場合は、変数は設定されません。なのでその場所には何も挿入されません。${«variable»:«default value»}
というシンタックスを使えばデフォルト値を与えることができます。例えば以下のようになります。
\textbf{${TM_SELECTED_TEXT:no text was selected}}
デフォルト値そのものが変数やシェルのコードを含むことができます。もし、デフォルトテキストに}
を含む必要があれば、エスケープをする必要があります。しかし、他の文字は全て文字通りです。
また${«variable»/«regexp»/«format»/«options»}
といったシンタックスを用いて、変数は[正規表現][]による置換をサポートします。もし変数が与えられていない場合、置換は空の文字列に対して実行されます。例えば、選択範囲の中のひとつひとつの空ではない行に中点をつけ、(それを挿入するには)、以下のようにします。
${TM_SELECTED_TEXT/^.+$/• $0/g}
Interpolated Shell Code (補完されたシェルコード)
スニペットが挿入されたときにシェルコードを実行させるために、あなたはバックティックを用いることができます。そのコードを実行することによって得られた結果がスニペットに挿入されます。(もしあれば)最後のnewlineが取り除かれた状態でですが。なので、例えば、リンクのURLをクリップボードがから得て、選択範囲をHTMLリンクでラップするスニペットを作るためには、以下のようなコードになります。
<a href="`pbpaste`">$TM_SELECTED_TEXT</a>
これは普通のbashコードなので、小さなプログラムを書く事もできます。例えば、クリップゴードが一行のみを含むということを確認させるためには、以下のようにできます。
<a href="`
if [[ $(pbpaste|wc -l) -eq 0 ]]
then pbpaste
else echo http://example.com/
fi
`">$TM_SELECTED_TEXT</a>
Inside shell code, the only character you need to escape is the backtick.
シェルコードの中で、唯一エスケープが必要になるのはバックティックです。
Tab Stops
挿入後キャレットはスニペットの最後の文字のうしろにきます。これはいつも理想的とは限りません。なので、私たちはキャレットが来てほしい場所に印をつけるために$0
を使って変更することができます。例えば、HTMLのdivのスニペットを作ってキャレットが開始タグと終了タグの間にようにできます。それは以下のようになります。
<div>
$0
</div>
しかし、私たちはスニペットの中のいくつかの場所を埋める必要がよくあります。$1
-$n
を挿入することによって複数のタブストップを与えられます。タブストップがなくなるまで、キャレットは$1
で始まり、次にタブを押すと$2
へ、次のタブで$3
へと動きます。もしあなたが明示的に$0
をセットしなければキャレットはスニペットの最後にきます。
例えば、上のコードを次のように変更できます。
<div$1>
$0
</div>
これで引数を埋めた後、$0
の位置へタブで移動できます。
Placeholders (プレースホルダ)
また、変数のように、タブストップはデフォルト値をもつことができ、(そして、それは一般的にプレースホルダと言われます。)シンタックスは同じです:${«tab stop»:«default value»}
。そしてデフォルト値はテキストとシェルコードと他のプレースホルダを含むことができます。なので私たちは前回の例をさらに洗練させることができます。
<div${1: id="${2:some_id}"}>
$0
</div>
このスニペットは選択された状態のid
引数とdiv
タグを挿入します。そしてそれから私たちはその引数を上書き(つまり削除)して、タブを押し$0
の場所へ行く、もしくは、すぐにタブで二つ目のタブストップ(引数の値)へ行き、それを編集するかを決める事ができます。
プレースホルダのテキストを編集すると、あらゆる埋め込まれたタブは削除されます。
Mirrors (ミラー)
挿入されたテキストのいくつかの場所へ同じ値を入れる必要がある場合、そんなときは、その場所にミラーされたものが必要ということを示すためにタブストップを再利用できます。だから、例えば、スニペットを使ってLaTex環境を作るためには、私たちは以下のようにできます。
\begin{${1:enumerate}}
$0
\end{$1}
このスニペットを挿入したあと、enumerate
が挿入され、編集されれば、その変化はend
にも反映されます。
Transformations(変形)
プレースホルダのテキストがミラーされてほしいが、少しだけ変化が必要な場合やプレースホルダの値/存在によってテキストを表示させたい場合があります。
(ミラーをするときに)プレースホルダのテキストに対して正規表現の置換をすることによってこれを達成できます。シンタックスは以下のようになります:${«tab stop»/«regexp»/«format»/«options»}
。
例として、Objective-Cのgetter/setterメソッドはよくこのような形をしています:
- (id)foo
{
return foo;
}
- (void)setFoo:(id)aValue
{
[foo autorelease];
foo = [aValue retain];
}
文字列のフォーマットでは、私たちは、次の文字を大文字にするために\u
を用います。それでスニペットは一度インスタンス変数の名前のみを尋ねるスニペットは以下のようになります。
- (${1:id})${2:foo}
{
return $2;
}
- (void)set${2/./\u$0/}:($1)aValue
{
[$2 autorelease];
$2 = [aValue retain];
}
また私たちは、決定をするために、フォーマットの文字列の中に条件付きの挿入を使う事ができます。例えば、もしメソッドのためにスニペットをつくれば、戻り値のタイプによってメソッドがreturn
命令を含むかどうかを判断させることが、以下のようにできます。
- (${1:void})${2:methodName}
{${1/void$|(.+)/(?1:\n\treturn nil;)/}
}
ここでは、void
か何か(..+
)に対してプレースホルダ1をマッチさせ、キャプチャのレジスタ1に後者のマッチを入れます。それから(void
以外の)何かとマッチしたときだけ、newline、タブ、return nil:
というテキストを挿入します。