亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

vscode 自定義代碼片段

SHERlocked93 / 3659人閱讀

摘要:插件描述語法制表位使用制表位可是在代碼片段中移動光標(biāo)位置,使用來指定光標(biāo)的位置數(shù)字代表光標(biāo)的移動的順序,值得注意的時代表光標(biāo)的最后位置。

實現(xiàn)效果

起因

最近在寫一個全新的項目,在項目中頻繁創(chuàng)建各種類,這就導(dǎo)致很多重復(fù)的東西需要頻繁的寫,例如類名,命名空間,繼承關(guān)系...那么有沒有一種 辦法能解決這個問題呢?

提出設(shè)想

我想起了,最初用 sublime text 的時候,可以利用代碼片段功能大段的生成html代碼,當(dāng)時就覺得十分的方便,那么 vscode 有沒有這個功能呢?經(jīng)過 google 之后我知道 vscode 是有代碼片段功能的。既然有了想法,也具備了基礎(chǔ)實施條件,那么接下來開始嘗試實現(xiàn)之前的想法。

資料查詢

經(jīng)過一番 google 后發(fā)現(xiàn)對于 vscode snippet 介紹都在相對基礎(chǔ)的簡單應(yīng)用(只是一些插入固定代碼和光標(biāo)介紹),者顯然無法實現(xiàn)我們生成類名和明明空間的想法,google 無果,那么只能看看 vscode 官方文檔果然有意想不到的收獲,看完官網(wǎng)介紹后,基本就確定此路是可行的。

snippet 示例

File > Preferences (Code > Preferences on macOS) 中選擇 User Snippets 在彈出框里選擇對應(yīng)的代碼片段語言,我這里使用的是php

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

在打開的 php.json 中有示例代碼:

Print to console 代碼片段名稱

prefix 插件前綴

body 插件內(nèi)容可以是字符串,也可以為數(shù)組,若為數(shù)組每個元素都做為多帶帶的一行插入。

description 插件描述

Snippet 語法 制表位(Tabstops)

使用制表位(Tabstops)可是在代碼片段中移動光標(biāo)位置,使用$1,$2來指定光標(biāo)的位置,數(shù)字代表光標(biāo)的移動的順序,值得注意的時$0代表光標(biāo)的最后位置。如果有多個相同的制表位(Tabstops)會在編譯器里同時出現(xiàn)多個光標(biāo)(類似編譯器的塊編輯模式)。

占位符(Placeholders)

占位符(Placeholders) 是帶默認(rèn)值的制表位(Tabstops),占位符(Placeholders)的文本會被插入到制表位(Tabstops)所在位置并且全選以方便修改,占位符(Placeholders)可以嵌套使用,比如${1:another ${2:placeholder}}。

選擇項(Choice)

占位符(Placeholders)可以有多選值,每個選項的值用 , 分隔,選項的開始和結(jié)束用管道符號(|)將選項包含,例如: ${1|one,two,three|},當(dāng)插入代碼片段,選擇制制表位(Tabstops)的時候,會列出選項供用戶選擇。

變量(Variables)

使用 $name 或者 ${name|default} 可以插入變量的值,如果變量未被賦值則插入 default 的值或者空值 。當(dāng)變量未被定義,則將變量名插入,變量(Variables)將被轉(zhuǎn)換為占位符(Placeholders)
系統(tǒng)變量如下

TM_SELECTED_TEXT 當(dāng)前選定的文本或空字符串

TM_CURRENT_LINE 當(dāng)前行的內(nèi)容

TM_CURRENT_WORD 光標(biāo)下的單詞的內(nèi)容或空字符串

TM_LINE_INDEX 基于零索引的行號

TM_LINE_NUMBER 基于一索引的行號

TM_FILENAME 當(dāng)前文檔的文件名

TM_FILENAME_BASE 當(dāng)前文檔的文件名(不含后綴名)

TM_DIRECTORY 當(dāng)前文檔的目錄

TM_FILEPATH 當(dāng)前文檔的完整文件路徑

CLIPBOARD 剪切板里的內(nèi)容

插入當(dāng)前日期或時間:

CURRENT_YEAR 當(dāng)前年(四位數(shù))

CURRENT_YEAR_SHORT 當(dāng)前年(兩位數(shù))

CURRENT_MONTH 當(dāng)前月

CURRENT_MONTH_NAME 本月的全名(’七月’)

CURRENT_MONTH_NAME_SHORT 月份的簡稱(’Jul’)

CURRENT_DATE 當(dāng)前日

CURRENT_DAY_NAME 當(dāng)天的名稱(’星期一’)

CURRENT_DAY_NAME_SHORT 當(dāng)天的短名稱(’Mon’)

CURRENT_HOUR 當(dāng)前小時

CURRENT_MINUTE 當(dāng)前分鐘

CURRENT_SECOND 當(dāng)前秒

當(dāng)前語言的行注釋或塊注釋:

BLOCK_COMMENT_START 塊注釋開始標(biāo)識,如 PHP /* 或 HTML

LINE_COMMENT 行注釋,如: PHP // 或 HTML

下面片則會生成 PHP / Hello World /

{
    "hello": {
        "scope": "php",
        "prefix": "hello",
        "body": "$BLOCK_COMMENT_START Hello World $BLOCK_COMMENT_END"
    }
}
變量轉(zhuǎn)換(Variable transforms)

變量轉(zhuǎn)換(Variable transforms) 允許變量在插入前改變變量的值,變量轉(zhuǎn)換(Variable transforms)由三部分組成

正則匹配:使用正則表達(dá)式匹配變量值,若變量無法解析則值為空。

格式串:允許引用正則表達(dá)式匹配組。格式串允許條件插入和做簡單的修改。

正則表達(dá)式匹配選項

下面例子是使用變量轉(zhuǎn)換(Variable transforms)將帶后綴的文件名轉(zhuǎn)換為不帶后綴的文件名

${TM_FILENAME/(.*)..+$/$1/}
  |           |         |  |
  |           |         |  |-> 無選項設(shè)置
  |           |         |
  |           |         |-> 引用捕獲組的第一個分組內(nèi)容
  |           |             
  |           |
  |           |-> 匹配后綴前的所有字符串
  |               
  |
  |-> 文件名(帶后綴)
需求實現(xiàn) 要解決的問題

生成Class 的命名空間、類名、選擇繼承關(guān)系

問題分析

項目目錄結(jié)構(gòu)如下所示

peoject
|
|----application
|--------admin
|------------services
|----------------TestServices.php

類名可以直接使用 TM_FILENAME_BASE 變量的值即可,命名空間則需要使用 TM_DIRECTORY 變量,以 TestServices.php 為例,TM_DIRECTORY 得到的目錄為 peojectapplicationadminservices我們只需要將peojectapplication 替換為 app 得到 appadminservices 就是我們的明明空間了,至于繼承就是一個選擇項就可以了。既然已經(jīng)全部知道該如何實現(xiàn),接下來就是代碼實現(xiàn)的過程了。

代碼實現(xiàn)
"service-construct" :{
        "prefix": "gen",
        "body": [
            "namespace ${TM_DIRECTORY/.*application/app/};
",
            "class $TM_FILENAME_BASE extends ${1|BaseService,BaseController,BaseModel|}",
            "{",
            "	public function __construct() 
    {
		$this->model = new 
	}",
            "}"
        ],
        "description": "generate service class"

    },
一些思考

上述代碼基本上完成了我要實現(xiàn)的功能,但是也存在了一些問題,例如:我現(xiàn)在是用 windows 操作系統(tǒng),因而TM_DIRECTORY 得到的目錄為 peojectapplicationadminservices 若是 linux 系統(tǒng),此代碼片段是無法正常的生成命名空間的,我做了一些資料的搜索,代碼片段并沒有自定義變量的功能(也許可以,只是我么有找到方法,如果有知道的大牛,請留言賜教。
隨著對 vscode snippet 的深入了解,我之前所設(shè)想的方案要用代碼片段的方式實現(xiàn)是有些困難的,vscode 將其作為一個快速生成代碼的解決方案,我們所寫的代碼片段相當(dāng)于一個帶有填空模板,而對代碼片段的應(yīng)用就是生成帶有制表符的代碼模板,然后根據(jù)制表符順序補全代碼。
至于這個不完美的方案,我打算再研究一下代碼片段是否能完全實現(xiàn),如果依舊解決不了,就選用其它方案進(jìn)行嘗試。

參考鏈接

Creating your own snippets

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/30995.html

相關(guān)文章

  • vscode js 實用的代碼片段

    摘要:目的是為了減少工作量。入口在選擇圖示的文件,那么這里就是可以自定義的代碼片斷的地方。我舉一個例子你們就明白了,看代碼打印在這段代碼中,是指你要提示的代碼前綴,效果如圖第二個就是我們自定義的代碼片段選擇之后的效果這個就是我們在代碼中定義的。 作為一名前端開發(fā)工程師,我們每天都想著代碼怎么抽成組件,公共方法。目的是為了減少工作量。但是你有沒有想過我們一直在寫重復(fù)的代碼,比如每天都會寫 im...

    wuyangchun 評論0 收藏0
  • snippet,讓你編碼效率翻倍

    摘要:做個記錄,上菜了如何打開配置這里以為例,其他編輯器大概也差不多。時間相關(guān)當(dāng)前年份當(dāng)前年份的后兩位格式化為兩位數(shù)字的當(dāng)前月份,如當(dāng)前月份的全稱,如當(dāng)前月份的簡稱,如當(dāng)天月份第幾天當(dāng)天周幾,如當(dāng)天周幾的簡稱,如當(dāng)前小時小時制當(dāng)前分鐘當(dāng)前秒數(shù)。 為什么談到Snippet 今天下午在用vscode做小程序的時候,發(fā)現(xiàn)很不方便,因為商店里提供的代碼片段極為有限,而且平時幾乎每天都需要用到代碼片段...

    denson 評論0 收藏0
  • snippet,讓你編碼效率翻倍

    摘要:做個記錄,上菜了如何打開配置這里以為例,其他編輯器大概也差不多。時間相關(guān)當(dāng)前年份當(dāng)前年份的后兩位格式化為兩位數(shù)字的當(dāng)前月份,如當(dāng)前月份的全稱,如當(dāng)前月份的簡稱,如當(dāng)天月份第幾天當(dāng)天周幾,如當(dāng)天周幾的簡稱,如當(dāng)前小時小時制當(dāng)前分鐘當(dāng)前秒數(shù)。 為什么談到Snippet 今天下午在用vscode做小程序的時候,發(fā)現(xiàn)很不方便,因為商店里提供的代碼片段極為有限,而且平時幾乎每天都需要用到代碼片段...

    caspar 評論0 收藏0
  • VScode快速一鍵生成html、vue、jsx、ajax、sass、docker等代碼片段

    摘要:學(xué)會添加自定義代碼段就可以極大的提高你的開發(fā)效率文件首選項用戶代碼片段選擇你需要新建的代碼片段的語言進(jìn)入代碼片段編輯界面所有的代碼片段需要用或包裹表示制表符空的一行必須用或包裹代表光標(biāo)第一次出現(xiàn)的位置,代表按下后光標(biāo)第二次出現(xiàn)的位置一個簡單 學(xué)會添加自定義snippet(代碼段)就可以極大的提高你的開發(fā)效率 showImg(https://segmentfault.com/img/bV...

    Simon 評論0 收藏0

發(fā)表評論

0條評論

SHERlocked93

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<