カスタムスニペットを追加するコード対

コードスニペット(スニペット)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つの部分を含むように定義されています。

  1. そして、それが変数を解決できない場合は、正規表現、または空の文字列に一致する変数の値。
  2. 正規表現からの参照と一致し、書式文字列を挿入するグループを可能にする「書式文字列」は、簡単な修正条件を可能にします。
  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        ::= .*

おすすめ

転載: www.cnblogs.com/silencehuan/p/11877655.html