成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

vscode 自定義代碼片段

SHERlocked93 / 3605人閱讀

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

實(shí)現(xiàn)效果

起因

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

提出設(shè)想

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

資料查詢

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

snippet 示例

File > Preferences (Code > Preferences on macOS) 中選擇 User Snippets 在彈出框里選擇對(duì)應(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ù)組每個(gè)元素都做為多帶帶的一行插入。

description 插件描述

Snippet 語法 制表位(Tabstops)

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

占位符(Placeholders)

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

選擇項(xiàng)(Choice)

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

變量(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 基于零索引的行號(hào)

TM_LINE_NUMBER 基于一索引的行號(hào)

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

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

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

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

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

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

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

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

CURRENT_MONTH 當(dāng)前月

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

CURRENT_MONTH_NAME_SHORT 月份的簡(jiǎn)稱(’Jul’)

CURRENT_DATE 當(dāng)前日

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

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

CURRENT_HOUR 當(dāng)前小時(shí)

CURRENT_MINUTE 當(dāng)前分鐘

CURRENT_SECOND 當(dāng)前秒

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

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

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

下面片則會(huì)生成 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á)式匹配組。格式串允許條件插入和做簡(jiǎn)單的修改。

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

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

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

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

問題分析

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

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

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

代碼實(shí)現(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"

    },
一些思考

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

參考鏈接

Creating your own snippets

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30995.html

相關(guān)文章

  • vscode js 實(shí)用的代碼片段

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

    wuyangchun 評(píng)論0 收藏0
  • snippet,讓你編碼效率翻倍

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

    denson 評(píng)論0 收藏0
  • snippet,讓你編碼效率翻倍

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

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

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

    Simon 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<