コードスニペット(スニペット)Vsのカスタムを追加
序文
スニペットは、重複したコードの入力モードを助けることができるのIntelliSenseにすばやくコード、より標準化されたコードのフォーマット統一ヘルプよりも時間を節約利便性を完了するために、私たちを助けることができます。
1対コード・コード・セグメントは、構成します
1.1コンフィギュレーション
設定方法を入力します。
1.File - プ - ユーザーSnippets--
私たちは、新しいグローバルコードセグメントプロファイル新グローバーSnippersファイルを作成することにしました
、タイプが「スニペット」コマンドウィンドウを開き2.ショートカットキー「Ctrlキー+ Shiftキー+ P」、「環境設定:configユーザスニペット」をクリックし、その後、上記のように、
wh.code-スニペット
{
// Place your global snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and
// description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope
// is left empty or omitted, the snippet gets applied to all languages. The prefix is what is
// used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.
// Placeholders with the same ids are connected.
// Example:
// "Print to console": {
// "scope": "javascript,typescript",
// "prefix": "log",
// "body": [
// "console.log('$1');",
// "$2"
// ],
// "description": "Log output to console"
// }
"create a new c source file": {
"prefix": "filec",
"body": [
"/**\n * @file ${TM_FILENAME}",
" * @brief $1",
" * @author wangh ([email protected])",
" * @version 1.0",
" * @date $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE",
" * @copyright Copyright (c) $CURRENT_YEAR 烽火通信",
" ***************************************************************",
" * @par 修改日志:",
" * <table>",
" * <tr><th>Date <th>Version <th>Author <th>Description",
" * <tr><td>2019-11-17 <td>1.0 <td>wangh <td>内容",
" * </table>",
" */",
"\n\n\n\n",
"/*********** (C) COPYRIGHT $CURRENT_YEAR FiberHome *****END OF FILE****/\n"
]
},
"create a new c head file": {
"prefix": "fileh",
"body": [
"/**\n * @file ${TM_FILENAME}",
" * @brief ",
" * @author wangh ([email protected])",
" * @version 1.0",
" * @date $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE",
" * @copyright Copyright (c) $CURRENT_YEAR 烽火通信",
" */",
"#ifndef __${1:${TM_FILENAME/(.*)\\.h$/${1:/upcase}_H/i}}",
"#define __$1",
"\n\n\n\n",
"#endif\t // __$1 \n",
"/*********** (C) COPYRIGHT $CURRENT_YEAR FiberHome *****END OF FILE****/\n"
],
},
"Define a struct": {
"prefix": "defstruct",
"body": "typedef struct \n{\n\t$2\n\t$3\n} ${1:name_t};"
},
"Define a enum": {
"prefix": "defenum",
"body": "typedef enum \n{\n\t$2\n\t$3\n} ${1:name_t};"
},
"main()": {
"prefix": "main",
"body": [
"int main(int argc, char const *argv[])",
"{\n\t$1\n\treturn 0;\n}"
]
},
"For loop": {
"prefix": "for",
"body": [
"for (${1:i} = 0; ${1:i} < ${2:count}; ${1:i}${3:++})",
"{\n\t$4\n}"
]
},
"Do while loop": {
"prefix": "do",
"body": "do {\n\t$0\n} while($1);"
},
"While loop": {
"prefix": "while",
"body": "while ($1)\n{\n\t$2\n}"
},
"Switch case": {
"prefix": "switch",
"body": [
"switch ($1) {",
"case $2:\n\t$3\n\tbreak;\n",
"default:\n\tbreak;\n}$0"
]
},
"printf()": {
"prefix": "printf",
"body": "printf(\"${1:%s }\\n\", $2);$3"
},
}
1.2効果
新しいファイルtest.cの作成
:入力「FILEC」は、一般的に右がポップアップし、次のようにFILEC効果を入力し選択するためのキーでダウンしているだろうと一致します
/**
* @file test.c
* @brief 测试文件
* @author wangh ([email protected])
* @version 1.0
* @date 2019-11-17
* @copyright Copyright (c) 2019 烽火通信
***************************************************************
* @par 修改日志:
* <table>
* <tr><th>Date <th>Version <th>Author <th>Description
* <tr><td>2019-11-17 <td>1.0 <td>wangh <td>内容
* </table>
*/
/*********** (C) COPYRIGHT 2019 FiberHome *****END OF FILE****/
新しいファイルを作成しますTEST.H
:入力「FILEC」は、一般的に右がポップアップし、次のようにFILEC効果を入力し選択するためのキーでダウンしているだろうと一致します
/**
* @file test.h
* @brief
* @author wangh ([email protected])
* @version 1.0
* @date 2019-11-17
* @copyright Copyright (c) 2019 烽火通信
*/
#ifndef __TEST_H
#define __TEST_H
#endif // __TEST_H
/*********** (C) COPYRIGHT 2019 FiberHome *****END OF FILE****/
その他のコードセグメントは、名前の独自のセットに従って試験することができます。
2.スニペットの設定構文
以下の要約は、主に翻訳し、公式文書に基づいています。
2.1 JSON形式
私たちは、組成物を説明するために簡単な例を持っています
{
"For Loop": {
"prefix": ["for", "for-const"],
"body": ["for (const ${2:element} of ${1:array}) {", "\t$0", "}"],
"description": "A for loop."
}
}
上記の例では:
- 「Forループ」セクション名です。
prefix
一つ以上のトリガ・ワードを定義し、インテリセンスでこれらのトリガ・ワードの概要が表示されます。接頭サブストリングマッチングは、「FOR-CONST」ので、この場合には、「FC」マッチで行います。body
コンテンツは、追加のインサートの多くの行として、1つまたは複数の行です。文脈に応じて挿入コードセグメントをフォーマット改行やタブ。description
これは、コードセグメントのIntelliSense表示の説明(オプション)です。scope
便利なグローバルコンフィギュレーションを使用しているとき、あなたは記入しない、適切な言語を設定することができ、すべての言語に適用されます表します。
さらに、body
(トラバーサルの順序で列挙された)は、3つのプレースホルダの例:、 ${1:array}
、${2:element}
および$0
。あなたは、次のプレースホルダにジャンプ、そしてあなたが再びプレースホルダを編集したり、次のプレースホルダにスキップすることができますすぐにタブを使用することができます。コロンの後の文字列は、例えば、デフォルトのテキスト、あるelement
の中で${2:element}
。最初からデジタルインクリメントからプレースホルダトラバーサル順序、;ゼロは任意の特別な場合であり、それは常に表示され、場合指定された位置にカーソルダイジェストモードを終了する最後のものです。
2.2構文
主場合の構文は、関連するbody
セクションは、特殊な構造とテキスト挿入カーソルを制御するために使用することができます。以下は、サポートされている機能とその構文、次のとおりです。
タブ
エディタが要約にカーソルを移動することができるように、タブを使用して。使用$1
、$2
指定されたカーソルの位置に、Tabキーを押しが順次アクセスされ、$0
それは、カーソルの最終位置を表します。同じタブストップの複数の出現は、リンクや更新を同期しています。
プレースホルダ
プレースホルダは、例えば、値がタブです${1:foo}
。プレースホルダテキストが挿入され、あなたが簡単に変更できるように選択されます。プレースホルダは、たとえば、入れ子にすることができます${1:another ${2:placeholder}}
。
選択
値はプレースホルダとして選択することができます。構文は、カンマ区切り値列挙、例えば、パイプ文字で囲んであります${1|one,two,three|}
。選択されたコードセグメントとプレースホルダを挿入した後、オプションのいずれかの値を選択するようにユーザに促します。
変数
使用$name
または${name:default}
変数の値を挿入することができます。変数が設定されていない場合は、それが挿入されますデフォルト値または空の文字列を。場合未知変数(すなわち、未定義の名前)、変数の名前が挿入され、プレースホルダに変換されます。
あなたは、次の変数を使用することができます。
TM_SELECTED_TEXT
現在、選択したテキストまたは空の文字列TM_CURRENT_LINE
現在の行の内容TM_CURRENT_WORD
カーソルまたは空の文字列の内容を下の単語TM_LINE_INDEX
行の0から始まるインデックスTM_LINE_NUMBER
行番号のインデックスに基づいて、TM_FILENAME
現在のドキュメントのファイル名TM_FILENAME_BASE
拡張子なし現在のドキュメントのファイル名、TM_DIRECTORY
カレントディレクトリのファイルTM_FILEPATH
現在のドキュメントの完全なファイルパスCLIPBOARD
クリップボードの内容WORKSPACE_NAME
名前のワークスペースまたはフォルダを開きます。
現在の日付と時刻を挿入するには:
CURRENT_YEAR
本年度CURRENT_YEAR_SHORT
年の最後の2桁CURRENT_MONTH
2桁の月(例えば、「02」)CURRENT_MONTH_NAME
月のフルネーム(例えば、「7月」など)CURRENT_MONTH_NAME_SHORT
今月の省略形(例えば、「7月」)CURRENT_DATE
月の日CURRENT_DAY_NAME
デイ名(例えば「月曜日」)CURRENT_DAY_NAME_SHORT
当日は、(例えば、「月」)と呼ばCURRENT_HOUR
現在の時間(24時間)CURRENT_MINUTE
現在の分CURRENT_SECOND
現在の秒CURRENT_SECONDS_UNIX
Unixの時代からの秒数
行またはブロックコメントを挿入するには、現在の言語に従ってください。
BLOCK_COMMENT_START
出力例:PHPで/*
またはHTML<!--
BLOCK_COMMENT_END
出力例:PHPで*/
またはHTML-->
LINE_COMMENT
出力例:PHPで//
またはHTML<!-- -->
次のコードセグメントを挿入することができる/* Hello World */
JavaScriptファイルと<!-- Hello World -->
HTMLファイルを:
{
"hello": {
"scope": "javascript,html", // 限定作用语言
"prefix": "hello",
"body": "$BLOCK_COMMENT_START Hello World $BLOCK_COMMENT_END"
}
}
変数変換
変換は、変数を挿入する前に、変数の値を変更することができます。変換は、3つの部分を含むように定義されています。
- そして、それが変数を解決できない場合は、正規表現、または空の文字列に一致する変数の値。
- 正規表現からの参照と一致し、書式文字列を挿入するグループを可能にする「書式文字列」は、簡単な修正条件を可能にします。
- 正規表現に渡されるオプション。
正規表現について参照できるJavaScriptのRegExpオブジェクトを
以下の実施例は、我々のヘッダ・ファイルを定義する際に、一例として記載されて使用されています
${1:${TM_FILENAME/(.*)\\.h$/${1:/upcase}_H/i}}
- TM_FILENAME:本文件名 test.c
- (。*)。\ H $:正規表現()TM_FILENAME削除部分を表した.h
- $ {1:/ UPCASE} _H:$:正規表現()大文字の{1 / UPCASE}、次いで_Hを追加
- I:大文字と小文字を区別しません
次の例では、soから、現在のファイルの名前と終わりを挿入しfoo.txt
、名前の先頭foo
。
${TM_FILENAME/(.*)\\..+$/$1/}
| | | |
| | | |-> 选项
| | |
| | |-> 第一个正则匹配捕获的内容
| |
| |-> 正则表达式
|
|-> 待转换的变量值
プレースホルダを変換します
変数Aコンバータと同じように、コンバータは、次のタブストップ変更プレースホルダにプレースホルダテキストの動きを挿入することができます。挿入されたテキストは、指定した置換テキスト形式を置き換えるために、正規表現にマッチし、そして(オプションに応じて)は、1つまたは複数の一致するエントリ。最初の値は、それ自身の独立した変換を定義するプレースホルダ各プレースホルダを使用することができます。可変プレースホルダ変換の変換と同じ形式。
変換例
彼らは2つのエスケープ特定の文字の必要性を説明するために、要約テキストに表示されるこれらの例は、二重引用符で表示されます。サンプル変換し、出力ファイル名の結果example-123.456-TEST.js
。
例 | 出力 | 説明 |
---|---|---|
"${TM_FILENAME/[\\.]/_/}" |
example-123_456-TEST.js |
最初の置き換え. を使用します_ |
"${TM_FILENAME/[\\.-]/_/g}" |
example_123_456_TEST_js |
それぞれを交換し. たり- して_ |
"${TM_FILENAME/(.*)/${1:/upcase}/}" |
EXAMPLE-123.456-TEST.JS |
すべて大文字を変更 |
"${TM_FILENAME/[^0-9^a-z]//gi}" |
example123456TESTjs |
削除英数字以外の文字 |
文法
以下は、EBNF(の要約である拡張BNF記法)。で\
(バックスラッシュ)、あなたが離れて得ることができる$
、}
と\
。要素を選択するには、バックスラッシュは、カンマやパイプ文字をエスケープします。
any ::= tabstop | placeholder | choice | variable | text
tabstop ::= '$' int
| '${' int '}'
| '${' int transform '}'
placeholder ::= '${' int ':' any '}'
choice ::= '${' int '|' text (',' text)* '|}'
variable ::= '$' var | '${' var '}'
| '${' var ':' any '}'
| '${' var transform '}'
transform ::= '/' regex '/' (format | text)+ '/' options
format ::= '$' int | '${' int '}'
| '${' int ':' '/upcase' | '/downcase' | '/capitalize' '}'
| '${' int ':+' if '}'
| '${' int ':?' if ':' else '}'
| '${' int ':-' else '}' | '${' int ':' else '}'
regex ::= JavaScript Regular Expression value (ctor-string)
options ::= JavaScript Regular Expression option (ctor-options)
var ::= [_a-zA-Z] [_a-zA-Z0-9]*
int ::= [0-9]+
text ::= .*