2007年11月17日
[jEdit] 使用BeanShell巨集自行擴充功能
jEdit提供了多種擴充機制(BeanShell、JPython等)讓使用者能自行增加功能,原本以為擴增的程序會很複雜,並且可能要使用不熟悉的語法來撰寫,沒想到原來BeanShell根本就是Java的語法,如果你已經會Java了,那麼幾乎不用學習就能馬上用BeanShell寫擴充巨集了。最快學會擴充巨集的方法,就是由閱讀其內建的巨集程式開始。
首先用jEdit開啟C:\Program Files\jEdit\Macros\Text\Insert_Date.bsh,我們看到的就像是一個標準的Java程式,先是定義了一個函數insertDate( ),最後面再叫用此函數,百分之九十五的程式都是一看就懂,在第53~55行的地方才是我們要注意的重點:
jEdit有幾個預設好了的系統變數,用來表示jEdit的各項主要元件,透過這些變數就能存取jEdit的各個設定並做需要的操作:
再來看另一個巨集:C:\Program Files\jEdit\Macros\Text\Insert_Tag.bsh,這個巨集將選取文字組成HTML標籤。重點解說如下:
我們可以注意到caret、tag、text等變數都沒有宣告型別而能直接使用,這是BeanShell和Java的一個重大差異,在BeanShell裡的變數可以不用事先宣告且能任意變型,這個特性當然能帶來方便性,但要小心日後的維護性。
##
首先用jEdit開啟C:\Program Files\jEdit\Macros\Text\Insert_Date.bsh,我們看到的就像是一個標準的Java程式,先是定義了一個函數insertDate( ),最後面再叫用此函數,百分之九十五的程式都是一看就懂,在第53~55行的地方才是我們要注意的重點:
// inserting date and internet time to textarea此段程式使用系統變數textArea的setSelectedText( ) method把目前時間插入選取文字。
textArea.setSelectedText(Calendar.getInstance().getTime().toString()
+ " @" + (int)swatch + " /Internet Time/");
jEdit有幾個預設好了的系統變數,用來表示jEdit的各項主要元件,透過這些變數就能存取jEdit的各個設定並做需要的操作:
- textArea:代表的是編輯區的文字區域
- buffer:代表了目前編輯中的檔案緩衝區
- view:代表了目前編輯中的檢視物件,UI的輸出都要透過此物件
if (buffer.isReadOnly())buffer.isReadOnly( )判斷目前編輯檔案是否是唯讀狀態,如果是唯讀的檔案則不能插入時間,而以Macros.error( )於當前的view顯示錯誤對話窗。Macros類別提供了許多放的method,按F1開啟jEdit Help找到'jEdit API Reference'裡的org.gjt.sp.jedit package,其內有包含Macros在內的許多系統類別;Macros有幾個method經常會使用到:
Macros.error(view, "Buffer is read-only.");
else
insertDate();
- Macros.error(view, "message"): 顯示錯誤訊息窗
- Macros.message(view, "message"); 顯示訊息窗
- Macros.input(view, "message", default-value); 顯示輸入對話窗
再來看另一個巨集:C:\Program Files\jEdit\Macros\Text\Insert_Tag.bsh,這個巨集將選取文字組成HTML標籤。重點解說如下:
| 行號 | 程式碼片段 | 說明 |
| 29 | caret = textArea.getCaretPosition(); | 取得目前游標位置 |
| 30 | tag = Macros.input(view, "Enter name of tag:"); | 讓使用者輸入標籤名稱 |
| 32 | text = textArea.getSelectedText(); | 取得選取文字 |
| 38 | textArea.setSelectedText(sb.toString()); | 把組好的文字寫回選取文字 |
##
2007年10月29日
[jEdit] 關鍵字(縮寫)擴展的強大插件:SuperAbbrevs
無論是稱做Live Templates(IntelliJ-IDEA)或Abbreviations(NetBeans,jEdit),達成的結果都是相同的:輸入一個較短的關鍵字,再按特定按鍵(一般是Tab或空白鍵)後即擴展成較多的一連串文字。例如輸入sop再按Tab則擴展成System.out.println("");。原本以為IntelliJ-IDEA的作法已經很有彈性了,沒想到SuperAbbrevs更是方便。
要使用SuperAbbrevs當然是先由Plugin Manager安裝此插件,再把jEdit提供相同功能的Abbreviations的Space bar expands abbrevs給關閉,以免互有干擾。
請使用幾個縮寫關鍵字多試幾次就會清楚其操作方式了。另外,不同的檔案格式(jEdit稱為編輯模式)使用不同的縮寫設定,另外也可設定一組所有模式共用的Global縮寫。可惜不能讓幾個Mode共用同一組設定,例如JSP與Java無法共用而必須分別設定。
要使用SuperAbbrevs當然是先由Plugin Manager安裝此插件,再把jEdit提供相同功能的Abbreviations的Space bar expands abbrevs給關閉,以免互有干擾。
使用縮寫擴展
預設的擴展按鍵是Tab鍵,例如輸入class再按Tab,編輯區會出現原本建立好的樣板文字,並且游標會移到定義好的位置讓使用者輸入,輸入完畢後再按Tab移到第二個定位處,繼續輸入再按Tab...重覆此步驟直到定位處皆擴展完畢;而要退回上一個欄位是按Shift+Tab。請使用幾個縮寫關鍵字多試幾次就會清楚其操作方式了。另外,不同的檔案格式(jEdit稱為編輯模式)使用不同的縮寫設定,另外也可設定一組所有模式共用的Global縮寫。可惜不能讓幾個Mode共用同一組設定,例如JSP與Java無法共用而必須分別設定。
建立縮寫的方法
用Plugin Options再進入SuperAbbrevs新增縮寫是標準作法,但步驟多了點,其實我們可以用下列步驟以快速建立縮寫關鍵字及其內容:- 先在編輯區裡輸入你要使用的縮寫關鍵字,例如:class
- 輸入好後按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
}
解釋上面的使用意義:- 共定義了4個定位變數$1、$2、$3、$4
- $1 供使用者輸入計數變數名,我們可以將$1加上額外屬性,讓游標進入$1位置時顯示此額外文字:${1:i} 或 ${1:counter} 或 ${1:計數器變數},提示文字依需求自行指定
- $2 是陣列變數名稱
- $3 是變數$4的型別
- $4 是存放陣列一個元素的變數
- $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裡。
##
2007年10月28日
[jEdit] 方便的主控台插件Console
Console是jEdit的一個功能強大的插件,其文件列舉了四大功能:
以上這些變數有何用處呢? 一個簡單的應用是把編輯中的檔案在Console裡送交到Subversion,例如:
- 執行外部的程式與命令
- 解析外部命令的輸出並輸出到ErrorList插件
- commando功能提供圖形介面以產生XML檔供命令列使用
- 提供可擴充的功能平台供別的插件輸出使用
Console插件的設定
- 我 們必須在Plugin Options裡把Console的字元編碼方式改成x-windows-950,才能在Console裡正常顯示繁體中文:【功能表 Plugins→Plugin Options...→Console→General→Character encoding】選取x-windows-950。
- 我 們也可以設定一個快捷鍵來開啟Console對話窗:【功能表Utilities→Global Options...→Shortcuts】,在Edit Shortcusts裡選取Plugin: Console→在Command欄位裡找到Console後,在Primary shortcut按一下,再按下你要用來顯示Console視窗的按鍵。
- 或者,也可以再把它放到側邊,我以下列步驟把Console停 駐在底部:【功能表Utilities→Global Options...→Docking】找到Console後把它的Docking position由floating改成Bottom,如此Console就會顯示在底部,按一下Console按鈕就能切換顯示與否。
Console的系統Shell使用
Console內建兩個Shell:System shell與BeanShell shell,System shell讓我們在jEdit裡執行作業系統的各項指令,BeanShell shell則提供jEdit內的BeanShell直譯器供我們操作。- 在系統Shell裡我們可以執行作業系統的命令,如dir、copy、del等。指令輸入時可以按Tab 鍵做自動完成(Auto Complete)的動作,例如要查看目前資料裡有那些AU開頭的檔案,們可以用dir AU*.*,也可以用dir AU{按Tab}:
D:\DOC> dir AU{按Tab鍵}
/-- Possible completions:
autoCorrect.txt
autocvs.bat
autoexp.doc
AutoRuns.txt
\-- End of completions.
- 用cd指令可以切換到別的資料夾,但要切換到另一個磁碟機時,不能如同在DOS提示命令裡一般用C:或D:變換,必須用 cd 磁碟機代號 的方式同時切換磁碟機和資料夾。
- 回到切換之前的資料夾:用 cd - 或只輸入減號。
- 回到使用者的家目錄:用 cd ~ 或只輸入 ~ 字元 (即C:\Documents and Settings\使用者代碼)。
- 如果我們要把Console命令的執行結果寫回jEdit編輯區的話,輸入命令後不要按Enter,而是改用Ctrl+Enter,那麼執行後的內容會導向到新的編輯區裡。例如:把dir的目錄內容寫到編輯區裡。
Console的環境變數
Console的環境變數能以Windows格式(%環境變數%)、UNIX格式(${環境變數})或$環境變數來取存,其內建的環境變數列舉幾個:| 內建變數 | 功用 | 說明 |
| ${c} | 目前編輯中的Base檔名 | Java檔案會以完整的類別名稱顯示(即com.xxx.yyy.類別的格式),其他則以不含路徑與副檔名的Base name格式顯示 |
| ${d} | 目前編輯中的檔案目錄名稱 | |
| ${f} | 目前編輯中的檔案完整名稱 | 包含路徑、Base name、副檔名等的完整檔名 |
| ${n} | 目前編輯中的檔案完整名稱 | 包含Base name和副檔名 |
| ${JEDIT_HOME} | jEdit的系統目錄 | 在Windows裡是"C:\Program Files\jEdit" |
| ${JEDIT_SETTINGS} | jEdit設定檔案之存放目錄 | 在Windows裡是"C:\Documents and Settings\使用者代碼\.jedit" |
svn commit -m "增加日期的控制" ${n}
Console的內建命令
列舉幾個Console的內建命令:| 內建命令 | 功用 | 範例 |
| %browse 路徑 | 開啟檔案系統瀏覽器至指定的路徑 | %browse c:\windows\system32 |
| %browse -n 路徑 | 以新視窗開啟檔案系統瀏覽器至指定的路徑 | %browse -n c:\windows\system32 |
| %edit 檔案 | 開啟指定的檔案到新的編輯區 | %edit c:\windows\system32\eula.txt |
| %run 腳本檔名 | 執行BeanShell等scripts | |
| %help | 顯示Console的說明文件 | |
| %{按Tab鍵} | 輸入百分號後再按Tab鍵,會顯示所有Console的內建命令 |
Console的commando留待下回再行說明了。
##
2007年10月26日
[jEdit] 系統畫面組成之說明
以下畫面係取材自美國Denison大學Using jEdit一文;文字則為本人所寫。
1. jEdit的外觀(View)
- 這是把組成jEdit的各個組件一次呈現的畫面。左、右兩側的檔案系統瀏覽器與剪輯器(Clipper,這個翻譯不知是否妥當?)是可以用Docker插件將之設成自動隱藏,如此才不會佔用編輯區的可用空間。在下面的畫面再將各個組件做細部介紹。
- 畫面底部左、右一、右二、右三位置可以雙擊開啟對話窗
| 位置 | 功用 | 雙擊功能 |
| 左側 | 游標列位置,行位置 當頁在檔案位置的百分比 | Go to Line,可輸入游標要移到那一列 |
| 右一 | (目前的編輯模式,摺疊模式,編碼) | jEdit的編輯模式(Mode)比較像是程式語言的樣板,摺疊模式則是把程式區塊收起與展開的設定。 雙擊開啟緩衝區選項設定對話窗。 jEdit的緩衝區(Buffer)指的是開啟檔案的記憶體內容,可以簡單的先當做就等同於編輯的檔案 |
| 右二 | 列的分隔字元模式 | 雙擊切換成Windows、Mac OS、Unix等三種換行符號 |
| 右三 | Java記憶體使用狀況 | 雙擊時會執行記憶體回收處理 |
2. 檔案系統瀏覽器(File System Browser)
- 用來尋找檔案、建目錄、刪檔案等的檔案操作
- 按Commands按鈕能直切變換資料夾到家目錄、根目錄等
- 常用的資料夾則可自行加到Favorites裡
3. 工具列
- 工具列圖示可以在【Utilities→Global Options...→Tool Bar】裡自行更換
4. 編輯區
- 文字處理的主要區域,右鍵功能表可以用其【Customize This Menu...】來設定
5. 緩衝區頁籤(BufferTabs)
- BufferTabs是另行安裝的插件,方便做檔案切換
6. Clipper插件
- Clipper也是要自行安裝的插件,常用的文字內容供快速引用
[jEdit] 指定啟動參數以提升運行效率
在Windows裡是使用jedit.bat來啟動jEdit,此批次檔的內容如下:
另一個提升開檔速度的方法是用「兩階段」啟動,這個方法適合記憶體較多的環境使用:
@echo off
start "jEdit startup" "C:\JDK1.6\bin\javaw.exe" -Xms64M -Xmx192M -jar "d:\jEdit\jedit.jar" -reuseview %*
- jedit.jar: 是jEdit的主程式
- -Xms64M: 設定啟始記憶體為64M
- -Xmx192M: 設定最大記憶體為192M
另一個提升開檔速度的方法是用「兩階段」啟動,這個方法適合記憶體較多的環境使用:
- 將下列批次檔(可命名為jedit_server.bat)內容存入啟動資料夾,讓Windows登入後自動執行,以建立jEdit的主機環境(Server mode):
rem d:\jEdit是jEdit的安裝資料夾
"d:\jEdit\jEdit.bat" -background -nogui
- 爾後再用jedit.bat啟動時,因為大部份需要的資源都已存在記憶體裡了,因此能很快的顯示出jEdit視窗
##
2007年10月25日
jEdit編輯器的初始設定與必裝插件
jEdit是以Java開發的,因此在安裝jEdit之前必須先安裝Java的開發套件(就是慣稱的JDK)。
2007/10/28修訂:由於網友的建議,我把要下載的部份再多做更精確的補充:
安裝時先以預設值安裝即可。啟動後第一個感覺應該都是「真是醜弊了」吧:-)
以下是我建議要先安裝的插件:
jEdit的一個方便之處是文件還算完整,安裝插件的同時,其說明文件也整合到Help系統裡,由Plugin Manager右下方的Help也可以輕易的連結到。
接著將插入放置到側邊:
- JDK下載:JDK開發網站,建議安裝JDK 5以上的版本
- jEdit下載:http://jedit.org
2007/10/28修訂:由於網友的建議,我把要下載的部份再多做更精確的補充:
- 如果不準備使用Java做開發,請安裝JRE即可(下載網址如上列之JDK網址,選Java Runtime Environment (JRE) 6 Update 3),檔案大小為13.93 MB
- 如果會以Java做開發則請安裝完整的開發套件:JDK 6 Update 3,檔案大小為65.64 MB
- 如果原本已經有安裝了JRE或JDK,請確定至少是1.5或以上的版本;部份新版的插件都要求必須有1.5版。請用regedit.exe檢視現有使用的JRE/JDK版本:
安裝時先以預設值安裝即可。啟動後第一個感覺應該都是「真是醜弊了」吧:-)
請先用下列步驟來美化它的外觀:
- 到Icons and Images網頁下載調整過、較美觀的圖示,我使用的是這個XP樣式的圖示
- 將下載的檔案複製到你的JDK安裝資料來\jre\lib\ext資料夾裡
jEdit 的插件安裝非常簡單,打開【Plugins→Plugin Manager...→Install】勾選要使用的插件後按Install就可以了,而且安裝後立即生效不用重新啟動jEdit。插件的預設目錄是% USERPROFILE%\.jedit\jars(亦即C:\Documents and Settings\用戶名稱\.jedit\jars),如果你希望要把設定存到jEdit安裝目錄以方便攜帶時,請務必在安裝插件之前先做下列設定:
- 【Utilities→Global Options...→Plugin Manager】將原本的jEdit settings directory改成jEdit application directory
以下是我建議要先安裝的插件:
| 插件名稱 | 功用 |
| BufferTabs | 將開啟檔案以頁籤樣式呈現。在Plugin Options裡勾選Enable BufferTabs by default;頁籤預設顯示在底部,也可由選項變更移動到上方。 原本顯示在上方的檔案切換列則可由【Utilities→Global Options...→View】將Show buffer switcher取消勾選 |
| ColumnRuler | 在文件編輯區上方顯示水平尺規,以方便檢視文字長度與游標位置。在Plugin Options裡勾選Active by Default |
| Console | 顯示類似DOS命令列視窗,可方便檔案的copy、delete等操作 |
| Docker | 側邊停駐設定管理,jEdit裡的視窗可以自由放置到側邊 |
| EditorScheme | 編輯器配色樣式選擇,可以做更進一步的美化 |
| MacroManager | 巨集管理程式,方便管理巨集 |
| OpenIt | 指定好搜尋路徑,輸入部份檔名自動篩選出符合的檔名 |
| ProjectViewer | 專案管理的瀏覽器,還可將數個專案組成一個群組,例如Web專案,與Java專案整併成開發專案,屆時開啟ProjectViewer時能很方便的在專案間切換目錄與找尋檔案 |
| SideKick | 剖析檔案的語法結構形成樹狀以方便檢視 |
jEdit的一個方便之處是文件還算完整,安裝插件的同時,其說明文件也整合到Help系統裡,由Plugin Manager右下方的Help也可以輕易的連結到。
接著將插入放置到側邊:
- 開啟【Utilities→Global Options...→Docking】
- 預設的視窗停靠點都是floating(浮動式),我的操作習慣是將File Browser、Project Viewer、Sidekick都變更到左側
- 【Plugins→Plugin Manager...→Docker】
- 把4個位置的Auto Hide都打勾
- 由下拉選單中選取不要自動隱藏的視窗用Add加進入Override清單裡
文字編輯器印象與jEdit
說起文字編輯器(Text Editor)的重要性,或許是比IDE(Integrated Development Environment)還更重要。IDE把編輯、編譯、偵錯等編程流程都整合在一套工具裡,讓程式師能很方便地編寫程式,但隨著功能越來越多,耗用的系 統資源也越多,活脫就是大恐龍的翻版,在Java的環境裡,無論是IntelliJ-IDEA、NetBeans或Eclipse,都是龐然巨物。因此,當只是要編輯文字檔、XML檔、HTML檔、JSP檔等文本檔案時,一般都會使用適合的文字編輯器,在眾多的文字編輯器裡,根據我個人的非正式統計,使用率最高的應該是UltraEdit。UltraEdit應該是個很好的編輯器,但可惜我從來都沒用過,因此無法進一步評斷高下。
以下我把我仍有印象且使用過的編輯器臚列如下:
以下我把我仍有印象且使用過的編輯器臚列如下:
| 編輯器名稱 | 作業系統 | 說明 |
| Edlin | DOS | 可能大多數人都不知道這個編輯器吧 :-) 陽春的行編輯器(Line Editor) |
| PE2 | DOS+倚天中文 | 在PC席捲市場初期,市面上找不到像樣的編輯器,當IBM的PE2出現且無料流通後,PE2幾乎是人手一套,接著就出現了許多國人模仿的xxE編輯器 |
| 漢書 | Windows | Windows 95以後,編輯器的選擇就更多了,當時因為專案的關係,使用了許久的漢書(Hyper Editor,HE) |
| EmEditor | Windows | 當Unicode逐步出現在各式文件後,不支援Unicode的漢書只能被支援良好的EmEditor取代了。EmEditor出自日本,因此對於中文有很好的功能性 |
| PSPad | Windows | PSPad是這幾年用得最久的編輯器,但它對中文的支援不佳,游標在中文區域裡移動時,經常會造成中文顯示異常,因此有時必須和EmEditor合用才能完成中文文字的修改 |
| jEdit | 跨平台 | 由於使用Linux的機會變多,因此希望能找到在各作業系統裡都能使用的編輯器,此時老牌的jEdit就脫穎而出了 |
jEdit是以Java開發的功能強大編輯器,擴充能力超強,有150多個插件(Plugin)可供直接擴充,我們也可以使用BeanShell腳本語言自行撰寫巨集。經由Google搜尋,發現jEdit的繁體中文介紹相當缺乏,因而自不量力地將在日後逐步介紹jEdit,希望讀者們能更了解這個方便的編輯器,而能大幅增進工作的生產力。
##









