iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
1
Software Development

這次我們不跳過 IDE系列 第 9

Day 09: 手工打造專屬於自己的 Snippets(二)

續,昨日

今天將講解剩下的部分,將介紹:

  1. 如何讓 Snippets 連結到快捷鍵上。
  2. 將 Snippets 對應到全域。
  3. 補充 Snippets 的變數們,可視為 Snippets 的保留字,提供文字動態轉換的功能。

如何將 Snippets 綁定到快捷鍵上

開啟快捷鍵設定檔:keybindings.json

開啟步驟如下:

  1. 將滑鼠挪到左下角的齒輪後,點擊。
  2. 找到鍵盤快速鍵後,點擊。
  3. 會開啟類似 GUI 功能的介面。
  4. 將滑鼠挪到右上角,找尋此圖示後,點擊。
    open keybinding icon
  5. keybindings.json 開啟成功。

寫法(一):直接 snippet 寫入 keybindings.json

提醒:command & when 不用修改。

{
  "key": "快捷鍵按法",
  "command": "editor.action.insertSnippet",
  "when": "editorTextFocus",
  "args": {
    "snippet": "snippets 寫在這"
  }
}

範例:

單行
{
  "key": "cmd+k a",
  "command": "editor.action.insertSnippet",
  "when": "editorTextFocus",
  "args": {
    "snippet": "console.log($1)"
  }
}
多行

使用 \n 即可。

{
  "key": "cmd+k b",
  "command": "editor.action.insertSnippet",
  "when": "editorTextFocus",
  "args": {
    "snippet": "console.log('----')\nconsole.log($1)\nconsole.log($2)\nconsole.log('----')"
  }
}

寫法(二):引用已經撰寫好的 snippets

前提:必須先行設定好一組 snippet,才可進行呼叫。

{
  "key": "快捷鍵按法",
  "command": "editor.action.insertSnippet",
  "when": "editorTextFocus",
  "args": {
    "langId": "該 snippet 所在的語言名稱",
    "name": "該 snippet 的名稱"
  }
}

範例

引用前幾個範例。

{
  "key": "cmd+k c",
  "command": "editor.action.insertSnippet",
  "when": "editorTextFocus",
  "args": {
    "langId": "javascript",
    "name": "Console Log 1"
}

如何將 Snippets 設定為全域

步驟如下:

  1. 將滑鼠挪到左下角的齒輪後,點擊。
  2. 找到使用者程式碼片段後,點擊。
  3. 這次我們選擇新增全域程式碼片段檔案
    create global snippets
  4. 輸入檔案名稱後,按下 enter。
  5. 將會建立一個副檔名為 .code-snippets 的 json 檔。

差異:

  1. 多了一個屬性:scope,負責定義對應的語言。

以下是預設範例:

{
  "Print to console": {
    "scope": "javascript,typescript",
    "prefix": "log",
    "body": [
      "console.log('$1');",
      "$2"
    ],
    "description": "Log output to console",
  }
}

Snippets 的變數們

Snippets 有預設不少變數可以使用,只要使用在 body 內使用,程式碼就會自動顯示出來。

以下是列表

編輯內容、檔案系統

變數名稱 定義
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 用 vs code 開啟的資料夾名稱

日期、時間

變數名稱 範例
CURRENT_YEAR 2019
CURRENT_YEAR_SHORT 19
CURRENT_MONTH 09
CURRENT_MONTH_NAME 九月
CURRENT_MONTH_NAME_SHORT 9 月
CURRENT_DATE 25
CURRENT_DAY_NAME 星期三
CURRENT_DAY_NAME_SHORT 週三
CURRENT_HOUR 19
CURRENT_MINUTE 21
CURRENT_SECOND 23
CURRENT_SECONDS_UNIX 1569410483

註解

變數名稱 範例
BLOCK_COMMENT_START /* 或是 <!--
BLOCK_COMMENT_END */ 或是 -->
LINE_COMMENT // 或是 <!-- -->

用法

在變數名稱前方使用 $ 就可以觸發使用了。

以下提供範例:

{
  "Console Log 8": {
    "prefix": "clog8",
    "body": [
      "console.log('---- $CURRENT_YEAR -----')",
      "console.log($CURRENT_YEAR)",
      "console.log($CURRENT_YEAR_SHORT)",
      "console.log($CURRENT_MONTH)",
      "console.log($CURRENT_MONTH_NAME)",
      "console.log($CURRENT_MONTH_NAME_SHORT)",
      "console.log($CURRENT_DATE)",
      "console.log($CURRENT_DAY_NAME)",
      "console.log($CURRENT_DAY_NAME_SHORT)",
      "console.log($CURRENT_HOUR)",
      "console.log($CURRENT_MINUTE)",
      "console.log($CURRENT_SECOND)",
      "console.log($CURRENT_SECONDS_UNIX)",
      "console.log('---- $CURRENT_MONTH ----')",
      "$BLOCK_COMMENT_START",
      "$BLOCK_COMMENT_END",
      "$LINE_COMMENT"
    ],
    "description": "使用預設保留字的 console.log"
  },
}

輸出結果:
clog-8

結論

完成!!!
透過這兩篇關於 Snippets 的介紹,讓設定專屬於自己的 snippets 不再是夢想,未來不會埋怨 extension 上沒有符合自己需求的 snippets 了!


上一篇
Day 08: 手工打造專屬於自己的 Snippets(一)
下一篇
Day 10: 與生俱來的特性:git
系列文
這次我們不跳過 IDE30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言