Idea Live Template代碼片段總結

来源:https://www.cnblogs.com/chenfangzhi/archive/2018/09/14/liveTemplate.html
-Advertisement-
Play Games

Idea Live Template總結 [TOC] live template是idea中提高效率的利器之一,以前看過一些教程,平時經常在使用,減少了我很多繁複的工作,但是沒有系統的去整理過,最近準備系統的整理下,主要是自己平時用到的和官方文檔的說明,如果有不正確的地方。 定義 : Live te ...


目錄

Idea Live Template總結

live template是idea中提高效率的利器之一,以前看過一些教程,平時經常在使用,減少了我很多繁複的工作,但是沒有系統的去整理過,最近準備系統的整理下,主要是自己平時用到的和官方文檔的說明,如果有不正確的地方。

定義: Live template可以讓你快速、高效、正確的插入平時經常使用的或者自定義的代碼片段。

一、演示

在開始之前,為了引起大家的興趣,我們先來看下使用live template的演示效果:

上面使用的就是live template,其中有預定義的sout,psvm和fori,還有自定義的todo和log等。可以看到使用live template可以用縮略詞產出設置好的代碼片段。

二、詳細介紹

2.1 類型

live template一共有三種類型分別是簡單、參數化和環繞類型。

  1. 簡單類型
    簡單類型就是固定的代碼片段,當通過縮略詞展開的時候,會在源代碼中展開。如最簡單和常用的pdvm展開就是main函數的定義。
  2. 參數類型
    參數類型就是代碼片段中帶有參數的模板,參數用$界定,如參數MY,這位$MY$,參數類型非常有用,我們自定義的模板很多都會用到參數,等會再設置中在進行講解。
  3. 環繞類型
    環繞模板指的是那種包裹代碼塊的模板,比如try catch,還有下麵演示的callable語句。
    三種類型的演示如下:

2.2設置(win預設快捷鍵win+alt+s)

路徑如下圖箭頭1處:

如圖中所示,iterations是idea自帶的group,fori是縮略詞,顧名思義這個組是針對迭代等操作的。
在使用時我們可以輸入10.fori,list.fori或者直接輸入fori然後按tab鍵(箭頭7處)插入代碼。idea會根據上下文生成不同的代碼片段,如10.fori直接生成了“for (int i = 0; i < 10; i++) {”,而直接輸入fori則是“for (int i = 0; i < ; i++) {”,註意此時10沒有自動生成需要你手動輸入。
我們可以點擊2處新建自己的template,template的縮略詞在同一group內不能重覆,所以為了不和自帶的鍵重覆我們最好新建自己的一個group比如MY,不同的group中的縮略詞可以重覆。箭頭5是描述用來助記的。
我們來自定義一個如下圖:

圖中是一個非常常用的輸入,根據類名來生成log靜態變數。你可以看到用$包裹的字元,這個就是上面介紹的參數類型,在生成的代碼片段中,如果要輸出$,需要用$轉義,即輸出$則在代碼片段中輸入$$。系統自帶兩個預定義的只讀變數,$END$和$SELECTION$,$END$代表代碼片段展開後游標最終停留的位置(如果有用戶自定義變數且需要用戶輸入的話則會一次停留在用戶變數處),預設如果不寫$END$游標會停留在最後,如果加和不加效果是一樣的。$SELECTION$代表的是你用游標選中的所有字元,屬於環繞類型,等會用例子會很明白。用戶變數需要我們賦值,點擊edit variables,在箭頭2處進行編輯。可以輸入兩種,一種是直接輸入字元串(需要用雙引號包裹)用的比較少因為是寫死的,另一種是idea的預定義函數(即通過下拉菜單選擇),比如這裡就是取類名。idea有很多預定義的函數,比如日期,行數,方法名,作者等等。一般用到這些預定義的函數就已經足夠了,但是有時複雜的輸出,就需要使用groovy腳本(下拉菜單groovyScript,這裡需要用到的語法很簡單)來進行。比如輸入方法的所有參數,如下圖:

我自定義了一個info(代碼片段:"$CLASS$.$METHOD$ linenum:$LINE$, param:{$PARAM$} info:$MY$"$END$),輸出了類名、方法名、行數和參數,這些信息在記錄日誌的時候非常有必要。其中$PARAM$變數就用到了腳本。我們來看下

// methodParameters是預定義函數,其中雙引號里的就是腳本,_1占位符只帶methodParameters參數
groovyScript("_1.collect { it + ' = [\" + ' + it + ' + \"]'}.join(', ') ", methodParameters())

關於備份和分享:live template文件保存在“{user}\{version}\config\templates”,user是指用戶目錄,version是idea目錄,如我的目錄就是C:\Users\chen.IntelliJIdea2017.3\config\templates,其中的文件名以group為名字。也可以在在File->Export Settings對話框中選中live template可以保存配置。
說明:在設置變數的值時有一列是Skip if define,這一列的意思是,如果有值了是否跳過(即游標是否停留),游標停留的位置是變數對話框中的順序來定的,可以用右邊的箭頭排序。如果所有的變數填充完了便會跳到$END$變數的位置,如果沒有定義$END$則跳到代碼片段結尾。

2.3 快捷鍵

win平臺預設的快捷鍵主要是三個ctrl+j(insert live template)、ctrl+alt+j(sround with live template)和ctrl+alt+t(sround with)。

快捷鍵是live template中經常需要用到的,所以需要記住。由於每個平臺不一樣,也有可能有人修改了快捷鍵,所以我用括弧註明瞭快捷鍵對應的名字,如果你的idea該快捷鍵不生效可以直接按圖中搜索名字。

  • ctrl+j:插入普通的live template
  • ctrl+alt+j:插入包裹的live template
  • ctrl+alt+t:插入包裹的代碼片段,這個包含了ctrl+alt+j但是又包含一些系統自帶的語句塊,比如if,while和for等等。

這裡就需要重點介紹下包裹的代碼片段,其實就是指的你用游標選中的代碼。使用這種代碼片段需要我們用游標去選擇然後輸入快捷鍵ctrl+alt+t或者ctrl+alt+j選中需要的使用的縮略詞。在自定義的代碼片段中有個自帶的$SELECTION$指的就是你用游標選中的代碼,在插入代碼片段時,就會將你選中的代碼插入到$SELECTION$。讓我們在實現一個帶包裹代碼片段的sloge,設置如下:

註意設置中箭頭的位置,選擇java,表示快捷鍵應用的上下文。
使用方法: 用滑鼠選中代碼,輸入ctrl+alt+j或者ctrl+alt+t選擇sloge。如下圖:

2.4 實戰

我自定義了幾個非常常用的代碼片段,分別是

  1. "info":輸出調試信息
// 代碼片段   
"$CLASS$.$METHOD$  linenum:$LINE$, param:{$PARAM$} info:$MY$"$END$   
// 變數定義     
$CLASS$:className()      
$METHOD$:methodName()   
$LINE$:lineNumber()   
$PARAM$:groovyScript("_1.collect { it + ' = [\" + ' + it + ' + \"]'}.join(', ') ", methodParameters())   
  1. "fen":分割線的註釋
// 代碼片段 
/* ---------------- $E$ -------------- */$END$
  1. "log":定義日誌常量
// 代碼片段 
private static final Logger logger= LoggerFactory.getLogger($CLASS$.class);
// 變數定義     
$CLASS$:className()  
  1. "zhushi":帶名字和日期的註釋
// 代碼片段 
// comment --$USER$-- $D$ ------>$ANNOTATION$
// 變數定義     
$USER$:"chenfangzhi"    
 $D$ :date("YYYY-MM-DD hh:mm:ss")
  1. "todo":todo註釋
// 代碼片段 
// todoBy$USER$ ---- $D$ ------>$TODO$
// 變數定義     
$USER$:"chenfangzhi"    
 $D$ :date("YYYY-MM-DD hh:mm:ss")

說明:todo的作用我就不講解了,這裡的第4和第5項可能很像,有很多地方需要標註是誰操作的,現在的項目很多都是多人開發,如果都是使用預設的todo,就會很混亂,這時候我們就需要自己來定義屬於自己的todo註釋,這時候就需要帶上名字。代碼片段可以自己定義,可以同時帶上todo和名字,這樣在查看todo列表的時候就可以進行篩選。如下圖:

圖上有兩個todo,在todo列表中可以點擊箭頭2處的過濾器篩選自己想要的看到的類型。我就是直接看chen這個類型。2處有個Edit Filter可以編輯過濾類型,很簡單的正則匹配。

這篇文章就總結到這裡,希望能夠對你有所幫助!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Can't debug c++ project because unable to static library start program *.lib Can't debug c++ project because unable to static library start program *. ...
  • RPC調用 多個服務協同完成一次業務時,由於業務約束(如紅包不符合使用條件、賬戶餘額不足等)、系統故障(如網路或系統超時或中斷、資料庫約束不滿足等),都可能造成服務處理過程在任何一步無法繼續,使數據處於不一致的狀態。傳統的基於資料庫本地事務的解決方案只能保障單個服務的一次處理具備原子性、隔離性、一致 ...
  • 網址:https://github.com/3216005214/wc.exe wc項目要求 wc.exe 是一個常見的工具,它能統計文本文件的字元數、單詞數和行數。這個項目要求寫一個命令行程式,模仿已有wc.exe 的功能,並加以擴充,給出某程式設計語言源文件的字元數、單詞數和行數。 實現一個統計 ...
  • str.isnumeric(): True if 只包含數字;otherwise False。註意:此函數只能用於unicode string str.isdigit(): True if 只包含數字;otherwise False。 str.isalpha():True if 只包含字母;othe ...
  • java其實沒有二維數組的概念,平常實現的二維數組只是元素是一維數組的一維數組,而數組也是引用類型,繼承自Object類。數組是new出來的。這些性質也就導致arraycopy()二維數組時出現的問題。 1、首先對於一維數組,如果元素都是基礎類型(如int,double等),使用arraycopy( ...
  • 此題最早看到是在我還什麼都不會的去年的暑期集訓,是V8講的DP專題,我當時還跑去問這概率怎麼做。這道題要求的是二維最長不上升子序列,加上位置一維就成了三維偏序問題,也就是套用CDQ分治,對位置排序,然後對一維分治,對剩下的一維樹狀數組,類似的問題用樹狀數組套平衡樹也能解決,但似乎常數很大。然後這題的 ...
  • 本地remix-ide安裝教程 一 開始安裝前 準備以下軟體 vs2015(主要會用到vc++的工具以及Windows sdk ||vs2017沒試過,不過應該可以) vs下載安裝以及解壓地址: https://blog.csdn.net/guxiaonuan/article/details/737 ...
  • 問題:如下圖,在百度編輯器中插入視頻,視頻網址可以識別,但是提交內容後視頻卻顯示不了。 解決:這個問題主要是編輯器中會過濾一些html標簽,所以可以給標簽添加白名單。 修改 ueditor.config.js 文件: 修改: img: ['src', 'alt', 'title', 'width', ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...