前天Slickedit 2007版(实际上就是v12)发布,昨天晚上弄到以后就开始了漫长的安装和体验过程。Slickedit 2007版本可以说是采纳了不少用户意见(当然也包括我的了(# ̄▽ ̄#)),增加了一些实用的功能。不过话又说回来新增加的功能中也带来一些麻烦,尤其是我原先寄予厚望的File List和Symbol Preview。不过在我对其代码进行了一番修改以后,已经用起来感觉不错了。
简单试用了一个晚上后,感觉Slickedit 2007相对于Slickedit 11.x来说,主要增加了如下新特性。
Project Add Tree增加黑名单:
小小的改进,不过在添加文件的时候要方便很多。使用黑名单可以过滤由某些无用文件或者自动生成的文件。
大大增强的Find Symbol功能:
原先v11的Find Symbol并不是很好用(相当于SourceInsight的F7功能)。2007中Slickedit对这点做了很大改进:首先Find Symbol窗口可以Dock,用起来非常方便;其次搜索功能及其强大。
Find Symbol支持前缀匹配和子串匹配查找(SourceInsight和原来的Slickedit用的最土的一种),Pattern查找(非常强大,可以支持正则表达式和通配符)。我一般就是习惯用通配符形式的Pattern查找因为我的正则很少用没法做快速反应(─.─||)。不过大多数时候有个通配符也就足够了。上图就是使用通配符查找的结果。
在查找范围上,可以选择查找的Tag库(比如当前WorkSpace或者是包含编译器的库文件等等),查找的Symbol范围(如仅仅是函数名或者是全局变量等)。总之用起来没有什么意见了。
File List功能(★):
打五角星的表示是采纳俺滴意见滴(^▽^)。我极力向Slickedit作者推销了SourceInsight的File List半天终于有了结果:Slickedit上面也出现了这样的东西。虽然还远没有到达完美的地步(后来我通过修改代码解决),但是比起v11和之前的弱智Project Load窗口来说,实在是个不小的改进。
2007的File List已经和SourceInsight一样是可以Dock在窗体内方便随时使用了。File List有三种模式:当前打开的文件列表、Project文件列表和WorkSpace文件列表。我一般都是使用WorkSpace列表模式。
这个File List用起来和SourceInsight的很像了,支持列表过滤(即查找时仅显示符合匹配条件的文件)。文件查找的过滤条件支持前缀匹配和子串符匹配两种(两者可以切换,用前缀匹配速度快):
值得一题的是无论是子串匹配还是前缀匹配都能支持通配符。前缀匹配似乎是只能支持“?”通配符,子串匹配支持“?*”两种。上图为使用子串匹配+通配符查找的效果,印象中似乎SourceInsight只能支持子串匹配不支持通配符?另外Slickedit的开发者说这回的File List内项目都有Cache,所以不会出现老版本每次打开大型项目的Project Load窗口的时候那好几秒的痛苦等待。不过我后来使用Linux Kernel项目来测试的时候发现,这好几秒只是转嫁到了项目打开的时候去了。现在打开巨型Project的速度要比原来慢起码10秒以上~~不过这个巨型项目是指文件总数在1.5w以上这样的东西。对于通常的文件不超过5000个的项目来说则没有什么问题。但是每次加载工程等个10秒,总比每次呼出Project Load对话框等个10秒要好啊!
这个File List在使用中发现的一个实在是无法忍受的问题是在里面包含的文件非常多(比如Linux Kernel的1.5w多个文件)的时候,过滤效率就会变得极其缓慢。这主要是两个原因造成的:一个原因是他使用的通配符过滤速度本来就比较慢,每次必须扫描所有的文件名进行通配符比较处理;另一个最主要的原因是Slickedit自己实现的Tree List控件效率有问题。在里面的子项非常多的时候添加删除子项就会变慢。1.5w个文件项在实时过滤时不断添加移除的后果就是导致每在Filter里面输入或者删除一个字母都会带来长达10秒左右的延迟!!所以这个File List在分析Linux代码的时候就会令人忍无可忍了。
不过在分析了一下File List的实现以后,我已经完成了对File List的初步修改。目前我修改的File List在项目文件数小于5000个的时候(可能再大也可以,不过没有闲心去试验究竟这个水线用多大好),就会自动使用Slickedit默认的通配符方式的过滤器;如果文件数大于水线,则自动使用我另外实现的快速前缀匹配搜索方式(即和原来的Project Load的搜索方式完全相同,实际上最经常用的一般也是这种):
可以看到上面的File List已经使用了前缀匹配的查找方式:在查找时只是跳到前缀最长匹配的一个文件去,而并没有对文件列表进行过滤操作。所以无论是查找速度还是控件的操作(完全没有增加和删除的操作)都极大减小,速度也快了几个数量级~~在使用了这样的修改以后,寻找Linux Kernel工程内的代码文件速度简直和SourceInsight内的File List无异了,可以说是基本完美解决。不过这个问题我有空还是要去烦一把Slickedit的那帮家伙去~~
Symbol Preview(★):
我曾经在Slickedit论坛上贴了个把原来的Symbol Windows改装成类似SourceInsight那样的Symbol Preview,并对多Tag情况下的操作做了点改进的宏。Slickedit开发者看见了很感兴趣,表示会在新版本加入这个功能,现在在2007上面果然看到了。
原先的Symbol Window现在改名为Preview,主要功能就是对在任何地方选中的Symbol(比如Reference中、Find Symbol中……)进行预览;并且在出现重名Symbol的时候可以从列表中直接选择某个Symbol进行预览,非常方便(操作上已经远胜SourceInsight的Context Windows了)。但是Slickedit 2007默认的Preview窗口布局实在是令人难以习惯:那种布局只适合于放在窗体的右侧,除非你是有双显示器或者是高分辨率的宽屏显示器的话才会用到那样奢侈的布局。所以我又是一通修改,把Preview窗口的布局修改成了我上图的样子,这样就很容易Dock到窗体下面去了。
改进的文本渲染:
实际上文本渲染的改进简直微乎其微,和SourceInsight的花花绿绿大杂烩的渲染还是没什么可比性。不过经过了修改以后Slickedit的渲染终于到了可怜的UE的水平:Highlight的颜色设置仅仅会替换背景色不会再替换前景色了。所以这回可以放心启用行高亮功能了不会再出现原先一启用行高亮就会导致当前行的语法高亮消失的情况:
可以看到行高亮处的语法高亮的字体和颜色设置都保留了,仅仅是替换了背景色。这点上Slickedit终于在2007版达到了和其他编辑器一样的水平了(─.─||)。
另外一个功能是带语法高亮的Copy功能,支持RTF和HTML两种。如果用RTF,能够完美支持中文,但是只能支持很少量的几种颜色(RTF的限制);如果用HTML可以完美支持所有颜色,但是不支持中文(─.─||)~~实在是鱼与熊掌不可兼得啊。不过对于一般用英文写注释的我来说,不支持中文基本不算是什么问题。下面就是Copy一段代码贴近来的效果:
/* setup uart port, enable interrupt */
rtn = pq2_uart_port_setup(pq2_uart, true);
if (rtn != 0) {
DEBUGMSG("ERROR in pq2_uart_tty_init: Code %d, System halt...n", rtn);
machine_halt();
}
这段代码在Slickedit里面的显示效果上图可以看见。大家可以对比一下,效果比Eclipse的好了太多了。另外也支持将整个代码导出成带有语法高亮的HTML。
文件标签栏支持中键关闭(★):
同样出自我之前贴在Slickedit论坛上对原有bufftabs的mod,现在中键关闭功能也被集成到2007中。
带有跳转按钮的Symbol信息提示:
现在将鼠标放在Symbol上之后出现的信息提示栏中多了一个绿色的跳转按钮,点击即可直接跳转到这个Symbol的Definition处。阅读代码起来更加方便了:
文档:
Slickedit的Slick-C宏语言一直是令人垂涎三尺又难以接近的东西。一旦掌握Slick-C就可以让Slickedit释放潜在的强大功能发挥无比威力,但是没有一个像样的文档又很大制约了用户对Slick-C的掌握和应用。看来Slickedit的开发者从论坛上大家对mod和patch活动的热衷中发现了为用户提供良好的开发文档是对双方都大有好处的事情。所以这回在Slickedit的安装包中,终于看见了比较像样的Slick-C开发文档了。以后再对Slickedit修修补补什么的有了文档就方便的多。
其他:
其他还支持了诸如行标尺和Dynamic Surround这样的比较没什么用处的功能。不过挺有趣的大家可以玩玩试试。