拒绝折腾——好用的EmEditor

套用一句俗话,叫做工欲善其事必先利其器,这其中“善其事”是指要有好的思想来解决问题,而“利其器”就是说要选择一个适合自己的工具。文本编辑器自然也不例外,尤其是已经或者即将有写代码需要的童鞋,您总不能拿Word来做事吧?嘿嘿~虽然某些高手曾经宣称“记事本是最适合写代码的工具”,但奈何悲观地认为我这辈子都达不到这样境界了……想必大家都或多或少使用过一些文本编辑器,自然也有自己的使用习惯,像Editplus、UltraEdit、SciTE、Vim、Emacs等等。
在这里顺便侃侃,如果我们把使用何种文本编辑器和独孤求败的剑法对应起来的话,Word可以算是利剑,上述的那些可以算作紫薇软剑或者是玄铁重剑(尤其UE是重剑),以我当前水平尚处于传说级别的Vim和Emacs恐怕就是木剑了,至于记事本么……就是无剑啦!哈哈,扯了这么多,还是要引出本文的主角,本人用起来非常上手的EmEditor了,在这里和大家分享分享。
EmEditor是一款小日本开发的软件,像什么代码高亮、代码折叠、连接编译器什么的,都是基本功能,在这里就不赘述了。不过我在说心得之前,还是要说说它的不足:
- 不是开源免费而是是收费商业软件,官网售价¥299.41(我只能很无耻地成为了盗版软件受害者)
- 不是跨平台的,仅有Windows版本
- 由于不是开源的,所以它尽管有扩展插件的功能,不过大多数所谓插件都是软件作者自己写的
- 子窗口停泊的功能不甚理想
- 项目的功能不足,尤其是用EmEditor自己来管理项目的时候(不过也不能强求它了,毕竟是轻量级的文本编辑器不是IDE)
- 没有即时参考chm格式手册的功能(据说通过外接程序KeyHH可以解决该问题)
轻巧的列块编辑功能
话说列块编辑功能,可是Vim、UltraEdit这类软件的看家功能,不过EmEditor也带有轻巧的列块编辑功能哦。按住Alt键用鼠标拖选就可以了,那么这个列块编辑功能有什么作用呢?
如上图,想要把HDOM全部替换成其他字符有什么好方法呢?除了使用替换功能,我们就可以来试试列块编辑功能了。按住Alt键用鼠标拖出一个矩形框把它们选中,然后键盘输入想要替换的字符,选中的字符就全都一起变化了。如果是列块选择在行首或者行末的话,就可以同时在每一行添加文本了,同时列块也可以像正常的文本一样剪切复制,十分强大。
丰富的预制代码片段
有时候,我们需要输入许多模式化的文本,这在HTML中尤其常见,输入很多<和>有时候显得很烦人,因为毕竟要按一个Shift键。EmEditor预制了各种编程语言中常用的代码片段,可以随时调用。比如,我在一段<?php ?>里面输入class后按下Tab键,它就会自动生成下面的内容:
/**
*
*/
class ClassName extends AnotherClass
{
function __construct(argument)
{
# code...
}
}
其中光标会停留在注释的第二行上,输入类的说明文字以后再按一下Tab键,光标就会选中ClassName让你输入类名,再按下Tab键会选中extends AnotherClass,你可以选择地输入继承的类名……以此类推,通过按Tab键来依次修改这个预定义好的代码片段。再比如,我输入一个英文感叹号以后按下Tab键,它就会出现一个菜单,让我选择一种IE条件注释,例如我选择了IE6 only以后,它就会生成<!--[if IE 6]> IE Conditional Comment: Internet Explorer 6 only <![endif]-->。不过那种用写CSS选择器生成HTML代码的Zen Coding功能还没有,而且Zen Coding也没有EmEditor的插件。
强大的查找替换
EmEditor的查找替换功能有两大强大之处,一是支持正则表达式,二是支持多文件批量查找替换。正则表达式很强大自然不必我多说,来简单地看一个示例吧,把英文半角的双引号"替换成配对的中文双引号“”,只需要在查找的窗口输入"([^"]*)",在替换的文本框中输入“\1”,就可以一次替换成功了。当然,在文件中批量替换也是一样。此外EmEditor还有一个贴心的小设计,那就是把文中所有匹配的字符用绿色的背景标出,就像用荧光笔涂过一样,可以让你很清楚地看出匹配的内容。
纯文本表格处理
有时候我们要看一些CSV(逗号分隔)或者是TSV(Tab分隔)的纯文本表格文件,但是一般情况下可视效果都非常差,列根本对齐不到一起去。在EmEditor里,这些文件可以以非常可视化的形式显示出来,列都被对齐了,而且就像表格软件那样,可以拖动调整列宽。更绝的是,EmEditor还可以对纯文本文件进行排序……OMG……
剪切板历史记录
我有时候总是觉得剪切板只有一个非常麻烦,像Word那些软件都有多重剪切板的功能,也有独立的软件来实现它。不过在EmEditor里面剪切板的历史记录是自动保存的,在需要粘贴的时候,循环按下Ctrl+Shift+V键就可以遍历剪切板的历史,选择要粘贴的内容。而且EmEditor也有保存工作区的功能,能让你下次打开软件的时候,撤销记录、剪切板记录依旧存在。
轻松应付超大文件和各种文字编码
EmEditor应对超大文件是很有一套的,可能是软件架构做的比较好吧,它有一个大文件载入控制器,保证打开超大文件不会卡,更不会失去响应。在EmEditor的官网上还专门有一个打开超大文件的测试,仿佛官方对这个特性十分得意呢。说实话,我上次有个20多MB的文件,其他软件一打开就失去响应了,唯独EmEditor笑傲江湖。
此外,EmEditor对Unicode的支持异常完美,而且软件可以用UTF-7、UTF-8、UTF-16BE、UTF-16LE(我一直搞不清这四个有什么区别……)和其他各类不同的文字编码载入文件,自动识别编码的效果也很好。我们可以新建一个很Geek版的文字高亮配置,然后用“OEM 美国(437)”的代码页来打开那些0day资源附带的nfo文件,就可以看到那些破解小组精心制作的ASCII字符艺术了。
结语
写到这里,我自己都觉得在给人家写软文了……呵呵,不过我可是真心诚意地和大家分享我的使用心得哈!也许你会说,我用的某某开源文本编辑器,你上面的功能我都能实现——没错,我相信这些功能不会是EmEditor独有的,最起码那传说级别的Vim和Emacs肯定早就有人做了相关的插件了。
不过我可不想扯到什么“开源软件和商业软件开发模式不同”这类的话题上。事实上我本人也很推崇那种“只做好自己的事,给别人留下接口”的理念(或者说信条),不过我的水平实在是还没有达到会在一个文本编辑器上折腾许久的层次。EmEditor那种为你想得非常全面,拒绝折腾的做法我还是很喜欢的(尽管我是无耻的盗版软件受害者)。
总之,毕竟那只是工具,是辅助我们“善其事”的,一切都要为实际工作服务。所以文本编辑器永远是自己用着顺手的最好。在这里再次给大家拜个晚年,祝愿大家都能找到一款最适合自己的文本编辑器!
loading...




VIMer 飘过表示没有影响
Linuxer 飘过表示楼主介绍的软件没有 Linux 版不做考虑
放酒里跑嘛……开源阵营永远觉得自己用的很爽而飘来飘去,所以开源不能解决所有问题
主要是现在已经习惯了编辑文件手不离主键盘区了……vim 是会用上瘾的,你可以参考为什么 fx 和 cr 都有 vim 按键风格的插件,而且都是评分很高很多人下载你就明白了……作为全世界最多程序员用的编辑器,绝对不是浪得虚名的。更况且,vim 和我是同龄的~
还好了,用thinkpad手也不用离开键盘区……再说,我没说vim不好啊~表激动嘛
哪有激动……
话说那个手不离键盘区是高效……thinkpad手不理键盘区并不能高效多少吧……
Thinkpad 手不离开键盘区怎么不能高效多少啊~再说那个是全局高效,呵呵~~
佩服楼上的
我用过一段时间的VIM
不过没有能坚持下来
@cluries 暂时对vim没有好感……
这个。。怎么显示目录文件列表??
@chua 我不太清楚你说的是什么意思……如果是指的显示一个类似资源管理器界面的功能,EmEditor Pro已经预装了这样的一个插件。如果你指的是要获取纯文本的目录内文件列表,可以使用
dir /b命令看起来还不错.
用了七八年EmEditor(因为用得比较顺手,所以也就基本没有折腾过其它文本编辑器——在EmEditor之前主要还是用记事本和Word来处理文本的),最近开始试用Vim,中意Vim的加密功能,更喜欢它的全键盘操作方式(我浏览器用Opera,就是看中它强大的键盘功能,基本也可以实现全键盘操作),不过我现在依然离不开EmEditor,比如它的(同目录下)跨文件搜索功能我不知道如何用Vim实现,另外在Vim中上下移动很不方便,完全是以回车“行”为单位,而不是以屏幕中的自动换行为单位。何去何从难做决定,两者都有我喜欢或是需要的功能。P.S.EmEditor用正则表达式进行大批量替换时速度比较慢(已忽略撤销记录),我都是用国产的TextPro6来进行这类操作的,后者可以说是瞬间完成
@Skybow 感谢您的评论,我的文章抛砖引玉了哈~~
软换行按gj,gk,跨文件搜索指的是在一个项目里搜索?vimgrep可以,也支持正则。
vim属于越用越高效的东西,很多人说感觉不出来vim高效在哪里,他们很多东西没有学到,就好像我用了一年多才知道ci(可以替换一对括号中的内容。。cit更是可以直接替换一对xml标签内的内容。。。vim博大精深,但是记十几二十个命令也能比较高效的编辑了,emeditor也用过,可以说,不是一个档次的东西。。虽然em编辑功能也很齐全,也支持插件,但是这些插件毕竟不管在数量上还是在质量上都要差很多。3000多个插件不是摆着看的,这意味着你想要什么功能几乎都已经有人实现了,这对一个程序员来说应该是相当重要的了,毕竟你可能面对各种各样的需求。在这点上emacs做的更加出色,只是emacs拿来当记事本容易,要想高效的使用它,不下苦功夫是不行的。所以我现在两个都在用,emacs在大多数情况下没有vim效率高,但是能实现比vim更加广泛的定制(几乎没有限制,只要你想的到,只要会写emacs-lisp)很纠结啊。。。
拜托请给我介绍个插件,能让Gvim在滚动时是按显示行逐行滚动,最好是平滑的。我就放弃了Vim就是因为它。
我为了达成这个目标,曾折腾过……
1、鼠标滚动滚轮和拖动滚动条时,按显示行进行。
——————————————————————————
我先是help mouse
help gui-mouse
跳到scroll-mouse-wheel
Win32 GUI 的滚动功能是通过硬编码实现的。具体滚多少行取决于您的鼠标驱动程序。
……………………………………………………………………
选项textwidth的作用是:当它设为“非零值”后,“在插入模式下”,每一次“手工输入”“非空格”时,如输入点超出了所设范围,就会进行一次——从设置的非零值位置处先向左扫描是否有半角空格,若无则再向右扫描,找到空格后插入回车,对新行再进行一次扫描,直至输入点在范围内或找不到空格。
选项textwidth的意义就是设置在输入时的行文最大宽度,超出后自动插入回车。它对中文语境不适合,因为中文语境并非由半角空格来划分单词。我们可设:
se fo+=m
这样一来,它就能划分中文了,但它在“插入模式”“超出范围”“手工输入”才起作用,我们可设:
se fo+=a
于是只有要修改,它就会自动排版了,而且是连结紧接的多段来进行,非常适合用于程序注释部分的修改。
无论如何,textwidth都会对文本修改(插回车),显然并不符合俺们的要求。
……………………………………………………………………
选项wrapmargin的作用是,在右方设一距离,当输入焦点进入后就相当于“超出范围”。它和上面的textwidth很类似,只不过一个是设置范围内大小,一个是设置范围外大小,设置了一个,就相当于设置了另一个,所以同一时间只能有一个起作用,wrapmargin的优先级低于textwidth。
同样,它也会修改文本,非我所需。
……………………………………………………………………
选项linebreak配合breakat,它能影响逻辑行划分为显示行的方式,如果linebreak开启,则它会在文本排到显示行末时回扫,扫到breakat所定义的字符,就将那字符后的部分重新显示到新行。
它是强调了优先以特定字符进行换行显示,仍不符合我之所需。
……………………………………………………………………
使用光标移动界面法:将光标移到边界,然后gj或gk出来。涉及到参数sj。
还是跳。
比如gj到底部后,如果未显示的下一逻辑行为多行显示,则它会突然跳出来,显示行全部显示出来,同时光标移至第一显示行上,相对于原坐标是上浮了;如果到达顶部的是多显示行,它也会一下子被清掉,界面也是突然上跳。
比如gk到顶部后,如果未显示的上一逻辑行为多行显示,也是一样突然全部跑出来,光标下沉。
失败。
……………………………………………………………………
使用Ctrl+E,比较贴近所需,但是如果第一行是多行显示,则界面会突然上跳,因为它一下子把多显示行清了。相应的Ctrl+Y也是一样问题,也是多显示行从顶部一下冒出来,界面会突然下沉。
相较于以上用光标逼出移动,它好在一个是光标仍在原逻辑位置,另一个是向下浏览时不会因下方要出的多显示行而突然上跳,不过仍会因上方的多显示行要消失而上跳。
……………………………………………………………………
@@无法可想=>>领悟出Vim是专于编程的,作文《勿盲目追星Vim》。
zen coding 可以支持啦
http://kejibo.com/emeditor-zen-coding/
不过不完美
@jashion 感谢提供~不过宏代码好长啊……
我觉得Vim是我最喜欢的且一直坚持用的,很高效!
@aegiryy 这么多人推荐,看来我真要放下敬畏,去试试了呢……
LZ文章不错啊!
打开大文件我曾做过测试,Editpad Lite(or Pro)绝对是第一,EmEditor可以排到第二.
EmEditor不可以随意控制列宽,列宽会随着文字长短而自动调节不方便整篇文字查看
@fangqing899 列宽默认都是80字符吧,好像可以修改的
请问如何操作呢???
当前配置>常规属性>按指定列数换行,在下面设置数字。