EmEditor 是啥?它是一款和UltraEdit、EditPlus类似的文本编辑器。
“KAO!有没有搞错,一个文本编辑器有啥好说的?!”
“我已经用惯了UltraEditor和EditPlus,不想再换了,再见!”
我想你肯定会这么说。以前我也用了很久的EditPlus,不过最近却转向EmEditor了,因为它确有许多独到之处。让我慢慢道来。

令人惊艳的查找显亮功能
说起来,用文本编辑器偷懒最常用的就是查找和替换功能了。我常常在想,我比民工唯一高级的地方就是我能复制粘贴以及查找替换而民工不能。当然,如果房子也能复制粘贴不知道还是不是现在这个价?查找替换确实挺高级,可是当一个文件里有三、五十个地方需要替换,我们一边一下一下地按着“替换”按钮,一边瞪大眼睛盯着不断跳动的屏幕,生怕把哪个不该替换的给替换了,完了还要担心是不是有该替换的没被替换?唉,程序员的命好苦,眼睛好痛啊……即使这样,“全部替换”按钮我也是不敢按的,谁知道这一按下去会有哪些不该替换的被替换了,又有哪些该被替换的却被漏掉了?一失足成千古恨的说。

如果你尝试在EmEditor里按“Find Next”按钮……
 

EmEditor,文本编辑器

看到没?(那些绿色可不是俺用记号笔故意涂上去的,虽然俺常喜欢这么干),所有匹配查找条件的部分都会被涂成绿色,这样我们就可以在替换之前先检查一遍,然后翘起二郎腿,喝一口咖啡,随手按一下“Replace All”,吼吼,瞬间搞定啦。

小贴士:选菜单“Search > Erase Find Highlight (Alt+F3)”可以暂时关掉显亮功能。

独门绝技:强制大写(小写)替换

深夜,鸭梨公司。
Clark正坐在电脑前发呆,一阵清脆的手机铃声打破了他的沉思,原来是他那正在读研的老婆打来的。
Clark:“老婆,论文通过了没有呀?”
老婆:“论文到是没啥太大问题,可是老师说我的程序完全不符合.net编码规范,让我全部改过来。可是明天就要正式答辩了,这可咋办呀?”
Clark:“怎么会这样?你把程序拿过来让我see 1 see。”
不一会,Clark就看到了他老婆的程序和肿得像水蜜桃似的眼睛。老婆指着程序里的属性声明代码说,喏,就是这里啦:

private long contract_id;
private string contract_number;
private string customer_name;

“老师说符合编码规范的代码要这个样子才行。”

private long contractId;
private string contractNumber;
private string customerName;

“嗯……这也不难,用正则表达式查找替换一下就行啦。”,Clark道。
“我也想过这招,可是用查找和替换最多只能把那个下划线去掉,并不能把小写的字母变成大写的啊?”老婆大人要急死了。
Clark微微笑道:“别急,面包会有的,小写也能变成大写的……”
在老婆大人扑过来之前,Clark以迅雷不及掩耳盗铃之势如破竹篮打水的速度打开了EmEditor,输入查找正则表达式【_(\w)】和替换表达式【\U\1\E】。“\1”表示查找表达式中的第一对“()”里的内容。

EmEditor,文本编辑器

然后,按一下“Replace All”按钮,就搞定了。

EmEditor,文本编辑器

小贴士:在“Replace”对话框中的“Find”和“Replace with”文本框的右侧各有一个“>”按钮,点击它们可以看到一个下拉菜单,列出了许多常用的正则表达式标记,点击菜单的最后一项“Help on Regular Expressions”可以打开EmEditor所支持的正则表达式帮助文档。

丰富的插件

不知道从啥时候起,很多正二八经的功能都不放到主程序里了——它们统统变成了插件,害得我安装了主程序之后还得一个一个地去下载插件。

EmEditor,文本编辑器
由于插件实在太多,限于篇幅(其实就是俺比较懒啦),这里仅介绍几个比较有趣的。

行首/行尾字符串插入

我们有一段VB写的程序:

OpenIceBoxDoor()
PutElephantIn()
CloseIceBoxDoor()

现在想把它改成C#的(也就是想在每行结尾加上一个分号啦),可以这么做:

EmEditor,文本编辑器
右对齐 & 列编辑模式

现在我们又想把上面的那段程序改为VB的了(也就是把行尾的分号去掉),可以这么做:

EmEditor,文本编辑器



说实话,我一直不太喜欢用宏,可能是被宏病毒给搞得有些心理障碍了吧。不过有些问题只有用宏来解决才方便。比如想从下面这段代码中把字段名取出来。

EmEditor,文本编辑器

使用“emeditor_perfecta_en.jsee”这个宏,让它把与正则表达式【Path=\w+】匹配的字符串抽取出来放到一个新的文档中。我不喜欢宏的另一个原因是不能够像查找替换那样可以在执行前预览,所以像这个宏这样不更改原来的文件内容而是把匹配的内容放到一个新文档中比较让人放心。

EmEditor,文本编辑器

EmEditor,文本编辑器

然后用前面介绍的列编辑模式把前面的“Path=”删除就行了。
您可能会问为什么不用带有逆环视结构的正则表达式【(?<=Path=)\w+】呢?这样在匹配结果里面就不会包含“Path=”啦。这是因为EmEditor中的宏是使用的JavaScript代码,而JavaScript里的正则表达式是不支持逆环视结构的EmEditor,文本编辑器
JavaScript里的正则表达式可以参考http://www.ijavascript.cn/shouce/javascript-regexp-71.html
可以使用这个小工具测试你的正则表达式Test javascript regex

获取字符编码

我一直记不住“<”这个字符的编码是啥,有了EmEditor就不用愁了。把光标置于“<”的左侧(注意是左侧而不是选中它),然后使用菜单“View > Character Code Value...  (Ctrl+I)”就可以知道它的ANSI和Unicode编码了。

EmEditor,文本编辑器

EmEditor,文本编辑器

“景”的Unicode编码为“666F”,就是“顺顺顺发”,知道我的运气为啥一直这么好了吧?

连字符计数功能都做得这么细致……

没想到这篇破文章写了 n 多小时都没写完,真想知道自己已经写了多少字了。

EmEditor,文本编辑器

原来才写了2000多字。

类似IE7的Tab页

在空白处双击鼠标左键,就可以新建一个空白文档。

EmEditor,文本编辑器

EmEditor,文本编辑器

丰富的定制功能

使用菜单“Tools > Properties for All Configurations”可以设置所有类型的文档属性;使用菜单“Tools > Select Configuartion > C#”可以单独设置C#文档的属性。

EmEditor,文本编辑器

例如如果把上图中的“Vertical Line”复选框打上勾,就可以在文档中显示一条银灰色的竖线,相当酷(这个有趣的功能是扇子发现的,特此感谢)。

EmEditor,文本编辑器