跳至主要内容

博文

目前显示的是 十一月, 2007的博文

VIM + CTags (2)

CTAGS工作的原理其实就是抓取源文件中所有的标签名字——包括关键字、变量名、方法名等,将它们排序后存储在标签列表文件中。VIM可以读取这个标签列表,根据用户的需要执行跳转。 CTAGS生成标签列表的方法很简单,以下命令展示了如何使用CTAGS抓取src目录中的所有文件生成标签列表: # ctags -f .\.tags -h .java -R .\src %JAVA_HOME%\src 这里用到了ctags的2个option(命令选项): -f [name]: 指定生成的标签列表的存储路径。 按照一定的规则存放所有的项目文件是一个好习惯。这里如果[name]指定为 - ,将会在stdout输出生成的标签列表。 -R: 等效于--recursive,要求递归对子目录进行抓取,一并生成标签。 对于Java、C#这些通过package支持命名空间的语言来说,这无疑是个非常高效的选项。想想com.jlazy.ctags.vim.Sample 这样的名字吧,对应到文件系统该需要多少个子目录,如果手动来抓取,那岂不是要抓到手抽筋…… -h [list]: 指定待处理的文件扩展名列表。 例如,".h.c.cpp.cxx.hpp"是为典型的C++程序指定的文件扩展名列表。 仔细打开ctags生成的tags文件看看,会发现头部其实定义了一些表明当前文件的状态的变量: !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ !_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ !_TAG_PROGRAM_NAME Exuberant Ctags // !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ !_TAG_PROGRAM_VERSION 5.5.4 // 通常直接生成的tags文件都是排过序的(sorted),显而易见排序的目的是方便vim通过查询算法快速定位标签。就像二分查找需要应...

VIM + CTags (1)

通常情况下,程序员在日常工作中打开的不可能只有一份文件——想想Java的package和class,C、C++的header files,还有.Net C#的partial class就会赞同这个观点。VIM这种强悍的编辑器自然充分考虑到程序员的需求 —— move around quickly。 VIM支持CTAGS程序,这是一个独立的程序,大多数Unix/Linux系统都安装了它的实现。只需要在$VIM/plugin中安装 taglist 插件即可借助于ctag的威力对所有文件进行tag的索引。值得一提的是,ctag本身在不同系统上的实现是可能有所不同的,推荐使用的是source forge上的开源项目 exuberant ctags。 C:\Program Files\GNU>ctags --version Exuberant Ctags 5.5.4, Copyright (C) 1996-2003 Darren Hiebert Compiled: Mar 29 2004, 22:21:09 Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net Optional compiled features: +win32, +regex, +internal-sort 安装了CTAGS程序之后,可以在系统变量path中加入该程序的路径,比较方便。如果不加入path,则需要在vim中加入配置行: let Tlist_Ctags_Cmd='C:\Program Files\GNU\ctags.exe' let Tlist_Use_Right_Window=1 let Tlist_File_Fold_Auto_Close=1 使用taglist的第一步,就是调用CTAGS程序生成tag list。 > ctags.exe $SRC\*.cpp $SRC\*.h 如果需要针对给定目录下的所有代码文件都生成tag,可以采用: > ctags.exe -R $SRC\*.java 生成的tags文件就是所谓的tag list(标签列表文件)。VIM可以通过这个文件来查找任何一个标签被定义的位置并跳转。 如果知道一个标签的名字,可以通过命令...

Android SDK Released

Google终于放出了 Android SDK (http://code.google.com/android)。YouTube上放了几段录像,有一个叫做Androidology的,分为3个部分,介绍了整个Android系统的架构、应用程序的生命周期等,非常详细。还有一段录像是Andorid的开发团队做的简单介绍。Android是Danger公司的研发成果,这家公司在2005年被Google买了下来。 Android使用了Linux作为内核,原因之一是Linux已经被证明对于硬件的驱动支持的很好,可以方便得移植到不同的硬件平台上。在内核层之上,是Library层,这一层主要是由C/C++编写的核心库程序,包括了: Surface Manager, 维护所有界面的管理程序 OpenGL/ES,支持3D界面的渲染,根据介绍,在Android上运行的应用程序可以同时使用2D和3D效果渲染。 SGL,支持2D渲染,这也是应用程序使用的最最最多的渲染方式。 Media Framework,这是由开放手机联盟中的一家公司支援的媒体框架,可以支持mpeg,mp4等解码。 FreeType,貌似是字体的支持 SSL,不用说了,安全连接协议 SQLite,Android的许多核心数据都是通过这个来保存的。 WebKit,开放的浏览器核心,Mac上的Safari也是从这发展起来的。 libc,接触过Linux的都久仰大名 同Library层并列的是Android Runtime (也就是所谓的运行时环境,这个“常见”的中文译名总是令初学者满脑子问号……)。Runtime包括了Dalvik VM和Core Libraries。Android平台上应用程序的开发是以Java为工具,最终编译为dex文件安装到移动设备上。之所以不直接采用class/JAR文件,肯定是出于效率的考量。为了提高字节码的运行速度,Android提供了自己的字节码解释器,针对运行效率做了很大的优化。所有的应用程序都在编译期间转化为dex格式。 再往上走是由Google或是其它公司提供的Application Framework (应用程序框架),这里开始就完全是Java的世界了: Activity Manager Activity主要是提供了一个用户动作的接口,实际上可以理解为一个UI,例如,一个Email程序可以...

Google & Android

随着iPhone的风行,传言中的Gphone吸引了越来越多的目光。本周Google刚刚参与了OHA对于 Android的发布 。 传言中的 Gphone 被认为是Google将要发布的第一款手机,不过这次Google选择了发布一个open platform —— 由三十多家厂商组成的开放式手机联盟(Open Handset Alliance),其中包括了移动设备的巨头,像是Motorola, T-Mobile, HTC和Qualcomm;也涵盖了移动运营商,如中国电信、KDDI、NTT DoCoMo;还有一大堆的硬件制造大牛,诸如Nvidia, TI等。毫无疑问,Android Platform要对抗的是Nokia的Symbian,微软的Windows Mobile,以及Palm等现有的移动设备平台。 Android的目标 是让移动设备可以像现有的PC一样,有能力访问所有的web service (想想Google Map,Gmail等服务),这无疑是令所有终端用户垂涎三尺的能力。据说2008的下半年就会有第一款基于Android的手机面世,等着到时候看成品了~

CHM Bug

发现CHM格式的一个bug——刚好在看一本书,叫做"Windows Forms Programming in C#",下载下来的时候文件名叫做"Addison Wesley.Windows Forms Programming in C Sharp.chm",一时手贱改成了"Windows Forms Programming in C#.chm"。对Windows系统而言,'#'是一个合法的文件名字符,但是不知道为什么,改名之后的CHM打开之后就是一片空白了。