EmEditor 是啥?它是一款和UltraEdit、EditPlus類似的文本編輯器。
“KAO!有沒(méi)有搞錯(cuò),一個(gè)文本編輯器有啥好說(shuō)的?!”
“我已經(jīng)用慣了UltraEditor和EditPlus,不想再換了,再見(jiàn)!”
我想你肯定會(huì)這么說(shuō)。以前我也用了很久的EditPlus,不過(guò)最近卻轉(zhuǎn)向EmEditor了,因?yàn)樗_有許多獨(dú)到之處。讓我慢慢道來(lái)。
令人驚艷的查找顯亮功能
說(shuō)起來(lái),用文本編輯器偷懶最常用的就是查找和替換功能了。我常常在想,我比民工唯一高級(jí)的地方就是我能復(fù)制粘貼以及查找替換而民工不能。當(dāng)然,如果房子也能復(fù)制粘貼不知道還是不是現(xiàn)在這個(gè)價(jià)?查找替換確實(shí)挺高級(jí),可是當(dāng)一個(gè)文件里有三、五十個(gè)地方需要替換,我們一邊一下一下地按著“替換”按鈕,一邊瞪大眼睛盯著不斷跳動(dòng)的屏幕,生怕把哪個(gè)不該替換的給替換了,完了還要擔(dān)心是不是有該替換的沒(méi)被替換?唉,程序員的命好苦,眼睛好痛啊……即使這樣,“全部替換”按鈕我也是不敢按的,誰(shuí)知道這一按下去會(huì)有哪些不該替換的被替換了,又有哪些該被替換的卻被漏掉了?一失足成千古恨的說(shuō)。
如果你嘗試在EmEditor里按“Find Next”按鈕……
看到?jīng)]?(那些綠色可不是俺用記號(hào)筆故意涂上去的,雖然俺常喜歡這么干),所有匹配查找條件的部分都會(huì)被涂成綠色,這樣我們就可以在替換之前先檢查一遍,然后翹起二郎腿,喝一口咖啡,隨手按一下“Replace All”,吼吼,瞬間搞定啦。
小貼士:選菜單“Search > Erase Find Highlight (Alt+F3)”可以暫時(shí)關(guān)掉顯亮功能。
獨(dú)門絕技:強(qiáng)制大寫(小寫)替換
深夜,鴨梨公司。
Clark正坐在電腦前發(fā)呆,一陣清脆的手機(jī)鈴聲打破了他的沉思,原來(lái)是他那正在讀研的老婆打來(lái)的。
Clark:“老婆,論文通過(guò)了沒(méi)有呀?”
老婆:“論文到是沒(méi)啥太大問(wèn)題,可是老師說(shuō)我的程序完全不符合.net編碼規(guī)范,讓我全部改過(guò)來(lái)?墒敲魈炀鸵酱疝q了,這可咋辦呀?”
Clark:“怎么會(huì)這樣?你把程序拿過(guò)來(lái)讓我see 1 see。”
不一會(huì),Clark就看到了他老婆的程序和腫得像水蜜桃似的眼睛。老婆指著程序里的屬性聲明代碼說(shuō),喏,就是這里啦:
private long contract_id;
private string contract_number;
private string customer_name;
“老師說(shuō)符合編碼規(guī)范的代碼要這個(gè)樣子才行!
private long contractId;
private string contractNumber;
private string customerName;
“嗯……這也不難,用正則表達(dá)式查找替換一下就行啦!保珻lark道。
“我也想過(guò)這招,可是用查找和替換最多只能把那個(gè)下劃線去掉,并不能把小寫的字母變成大寫的?”老婆大人要急死了。
Clark微微笑道:“別急,面包會(huì)有的,小寫也能變成大寫的……”
在老婆大人撲過(guò)來(lái)之前,Clark以迅雷不及掩耳盜鈴之勢(shì)如破竹籃打水的速度打開(kāi)了EmEditor,輸入查找正則表達(dá)式【_(\w)】和替換表達(dá)式【\U\1\E】。“\1”表示查找表達(dá)式中的第一對(duì)“()”里的內(nèi)容。
然后,按一下“Replace All”按鈕,就搞定了。
小貼士:在“Replace”對(duì)話框中的“Find”和“Replace with”文本框的右側(cè)各有一個(gè)“>”按鈕,點(diǎn)擊它們可以看到一個(gè)下拉菜單,列出了許多常用的正則表達(dá)式標(biāo)記,點(diǎn)擊菜單的最后一項(xiàng)“Help on Regular Expressions”可以打開(kāi)EmEditor所支持的正則表達(dá)式幫助文檔。
豐富的插件
不知道從啥時(shí)候起,很多正二八經(jīng)的功能都不放到主程序里了——它們統(tǒng)統(tǒng)變成了插件,害得我安裝了主程序之后還得一個(gè)一個(gè)地去下載插件。
由于插件實(shí)在太多,限于篇幅(其實(shí)就是俺比較懶啦),這里僅介紹幾個(gè)比較有趣的。
行首/行尾字符串插入
我們有一段VB寫的程序:
OpenIceBoxDoor()
PutElephantIn()
CloseIceBoxDoor()
現(xiàn)在想把它改成C#的(也就是想在每行結(jié)尾加上一個(gè)分號(hào)啦),可以這么做:
右對(duì)齊 & 列編輯模式
現(xiàn)在我們又想把上面的那段程序改為VB的了(也就是把行尾的分號(hào)去掉),可以這么做:
宏
說(shuō)實(shí)話,我一直不太喜歡用宏,可能是被宏病毒給搞得有些心理障礙了吧。不過(guò)有些問(wèn)題只有用宏來(lái)解決才方便。比如想從下面這段代碼中把字段名取出來(lái)。
使用“emeditor_perfecta_en.jsee”這個(gè)宏,讓它把與正則表達(dá)式【Path=\w+】匹配的字符串抽取出來(lái)放到一個(gè)新的文檔中。我不喜歡宏的另一個(gè)原因是不能夠像查找替換那樣可以在執(zhí)行前預(yù)覽,所以像這個(gè)宏這樣不更改原來(lái)的文件內(nèi)容而是把匹配的內(nèi)容放到一個(gè)新文檔中比較讓人放心。
然后用前面介紹的列編輯模式把前面的“Path=”刪除就行了。
您可能會(huì)問(wèn)為什么不用帶有逆環(huán)視結(jié)構(gòu)的正則表達(dá)式【(?<=Path=)\w+】呢?這樣在匹配結(jié)果里面就不會(huì)包含“Path=”啦。這是因?yàn)镋mEditor中的宏是使用的JavaScript代碼,而JavaScript里的正則表達(dá)式是不支持逆環(huán)視結(jié)構(gòu)的
JavaScript里的正則表達(dá)式可以參考http://www.ijavascript.cn/shouce/javascript-regexp-71.html
可以使用這個(gè)小工具測(cè)試你的正則表達(dá)式Test javascript regex
獲取字符編碼
我一直記不住“<”這個(gè)字符的編碼是啥,有了EmEditor就不用愁了。把光標(biāo)置于“<”的左側(cè)(注意是左側(cè)而不是選中它),然后使用菜單“View > Character Code Value... (Ctrl+I)”就可以知道它的ANSI和Unicode編碼了。
“景”的Unicode編碼為“666F”,就是“順順順發(fā)”,知道我的運(yùn)氣為啥一直這么好了吧?
連字符計(jì)數(shù)功能都做得這么細(xì)致……
沒(méi)想到這篇破文章寫了 n 多小時(shí)都沒(méi)寫完,真想知道自己已經(jīng)寫了多少字了。
原來(lái)才寫了2000多字。
類似IE7的Tab頁(yè)
在空白處雙擊鼠標(biāo)左鍵,就可以新建一個(gè)空白文檔。
豐富的定制功能
使用菜單“Tools > Properties for All Configurations”可以設(shè)置所有類型的文檔屬性;使用菜單“Tools > Select Configuartion > C#”可以單獨(dú)設(shè)置C#文檔的屬性。
例如如果把上圖中的“Vertical Line”復(fù)選框打上勾,就可以在文檔中顯示一條銀灰色的豎線,相當(dāng)酷(這個(gè)有趣的功能是扇子發(fā)現(xiàn)的,特此感謝)。