2007年10月29日

[jEdit] 關鍵字(縮寫)擴展的強大插件:SuperAbbrevs

無論是稱做Live Templates(IntelliJ-IDEA)或Abbreviations(NetBeansjEdit),達成的結果都是相同的:輸入一個較短的關鍵字,再按特定按鍵(一般是Tab空白鍵)後即擴展成較多的一連串文字。例如輸入sop再按Tab則擴展成System.out.println("");。原本以為IntelliJ-IDEA的作法已經很有彈性了,沒想到SuperAbbrevs更是方便。

要使用SuperAbbrevs當然是先由Plugin Manager安裝此插件,再把jEdit提供相同功能的Abbreviations的Space bar expands abbrevs給關閉,以免互有干擾。

使用縮寫擴展

預設的擴展按鍵是Tab鍵,例如輸入class再按Tab,編輯區會出現原本建立好的樣板文字,並且游標會移到定義好的位置讓使用者輸入,輸入完畢後再按Tab移到第二個定位處,繼續輸入再按Tab...重覆此步驟直到定位處皆擴展完畢;而要退回上一個欄位是按Shift+Tab

請使用幾個縮寫關鍵字多試幾次就會清楚其操作方式了。另外,不同的檔案格式(jEdit稱為編輯模式)使用不同的縮寫設定,另外也可設定一組所有模式共用的Global縮寫。可惜不能讓幾個Mode共用同一組設定,例如JSP與Java無法共用而必須分別設定。

建立縮寫的方法

用Plugin Options再進入SuperAbbrevs新增縮寫是標準作法,但步驟多了點,其實我們可以用下列步驟以快速建立縮寫關鍵字及其內容:
  1. 先在編輯區裡輸入你要使用的縮寫關鍵字,例如:class
  2. 輸入好後按Shift+Tab,編修縮寫的對話窗就會出現供你編輯樣板內容

在樣板裡可以用$1、$2等來指定按Tab時的定位點,$1是第一個定位點,$3是第三個定位點,以此類推。這些定位定義能夠重覆多次,當相同的定義輸入後,別的同名的定義會自動更新成輸入的內容。例如我們設定一個縮寫itar (Iterate Array):
  for (int $1=0; i < $2.length; $1++) {
$3 $4 = $2[i];
out.println("$2[" + $1 + "] = '" + $4 + "';");
$end
}
解釋上面的使用意義:
  1. 共定義了4個定位變數$1、$2、$3、$4
  2. $1 供使用者輸入計數變數名,我們可以將$1加上額外屬性,讓游標進入$1位置時顯示此額外文字:${1:i} 或 ${1:counter} 或 ${1:計數器變數},提示文字依需求自行指定
  3. $2 是陣列變數名稱
  4. $3 是變數$4的型別
  5. $4 是存放陣列一個元素的變數
  6. $end是最後游標停留的位置
加入提示文字後的內容如下:
  for (int ${1:計數器}=0; i < ${2:陣列}.length; $1++) {
${3:型別} ${4:元素變數} = $2[i];
out.println("$2[" + $1 + "] = '" + $4 + "';");
$end
}
另外,還可以用${1=函數}的方法把輸入的文字做格式變化,例如下列產生get/set程式片段,其中的firstUp( )就是把輸入文字的第一個字元轉成大寫:
/**
* Getter function for the field $1
*/
public ${2:Type} get${1=firstUp(s)}() {
return ${1:field};
}
/**
* Setter function for the field $1
*/
public void set${1=firstUp(s)}($2 $1){
this.$1 = $1;
}

轉換用函數主要是放在C:\Documents and Settings\使用者\.jedit\SuperAbbrevsn\abbrev_functions.bsh裡。

 

## 



Posted by emisjerry at 樂多Roodo! │22:46 │回應(2)引用(0)jEdit
樂多分類:網路/3C 共同主題:Programing 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/4388699
回應文章

請問,superabbrevs 有已經編輯好的模版可以直接匯入嗎?
Posted by Eric at 2007年12月10日 14:43

抱歉出國多日遲至今日才回...

SuperAbbrevs安裝後即有其內建的內容了。
Posted by emisjerry at 2007年12月26日 22:19