临时方案——Programmers(32)

载于《程序员》杂志2011年第12期。

这个系列的漫画讲述程序员——这种神秘人类的囧事,故事多来源于我身边的程序员朋友,且以互联网开发背景为主。

如果你有什么可乐的关于程序员的故事、对话、代码,愿意通过漫画的形式分享,请给我发邮件。arthur369@gmail.com。

密码泄漏和黑天鹅事件

从天涯的密码被公布之后,我觉得这事情闹的有点大了,周围很多人恐慌,所以我就勉强写一篇说说我的看法吧… ==========================================

世界上没有什么东西是安全的,除非其毫无价值。所以最近发生的CSDN/7k7k/天涯等等密码库明文泄漏的事情完全在情理之中,甚至我相信还有更多的库还没进入大众视野。很多人可能是第一次遭遇这种事件,心理上承受的打击比较大,大概感觉应该像是被扒光了衣服丢在人堆里。其实这种事情发生的太多了,比如半年之前SONY用户数据库被泄漏,那个包含的信息更多,甚至连家庭地址都有,而且数量也大的多,据估计有7700万玩家数据。相比起来中国网站目前泄漏的这点密码实在不算什么。我相信好玩的还在后面。

在密码方面,我的个人经验是这样的:

1. 多数网站我不信任,所以都使用简单密码。为了增加一点乐趣,我还通常会用一些带有嘲笑意味或侮辱意味的词汇缩写做密码,既然知道肯定会被人看到,那还不如调戏一下看我密码的人。结果没想到这次泄漏出来之后调戏的人有点多。我相信这种共识在程序员群体中普及很广,CSDN泄漏的密码中极大比例是简单密码,并不能说明程序员没什么安全意识,而很可能是他们太有安全意识了,根本不指望网站能保密,反正也不重要,干脆用最简单的,省下来脑子去记重要的。在CSDN密码泄漏的当天,我问一个朋友,xxxx@xxx.com是你的帐号吗?他回答如果密码是12345678就是,否则就不是。他就是这样的心态。

2. 不要给任何网站用一样的密码,除非你确认他们全无价值,以至于被别人登陆了也没什么大不了的。

3. 对于最重要的服务,光靠密码是不行的。密码只是权宜之计,甚至可以说非常脆弱,这也是在各种条件之下权衡出的一个勉强可用的解决方案。除了密码之外还有很多方法(虽然也各有弱点),比如密钥(startssl.com用的就是http密钥),或者硬件token(除了银行,google 2-step也是),这些都能降低被盗几率。基本所有服务都可以找回密码,所以一个足够安全的邮箱才是最重要的。目前只有gmail在各方面都符合我的要求,比如:登陆出错之后图片验证码足够复杂,有登陆日志,找回密码有时间限制,有硬件token等。所以,就选gmail吧,如果你真觉得安全重要,就别在乎偶尔访问困难。之前因为gmail偶尔访问困难而把企业邮箱迁移走的团队,你们实在缺乏远见。

4. 在没有https的网站登录,登陆中发送的密码很容易被窃听。所以登录非https网站,需要清醒理解,如果当前网络环境不安全,这个密码很容易泄漏,即使是在网站本身有严格加密的前提下也是一样。如果在不信任的网络下,就先拨一个私有VPN吧。(delphij据说就算在美国酒店上网都要先拨回自己家里路由器上的VPN,要学习这种折腾精神)

5. 足够重要的服务密码要给予相应的重视。密码难记是正常的,除了努力记,还可以用一些可靠的密码管理器(请先确认使用密码管理器的计算机是足够安全的)帮助存储,比如mac的Keychain Access。不过就算有这些,自己也应该有几个超过10位的数字字母符号混合的密码完全自己记住。记密码通常是靠连续多打几遍,让肌肉反射记住而不是脑子。Mac OS X的Keychain Access可以生成一类叫做memorable的密码,是比较适合记忆的,强度也算过得去。如果不能确认计算机是安全的,那么密码写纸上比用软件记录还安全点。

6. 为了保证计算机足够安全,我个人还有如下习惯(可能有点极端)。 a) 不使用任何第三方输入法,除非开源 b) 在mac上不用root权限运行任何非系统自带程序,除非开源 c) 如果非常用不能确定的程序,专门给它建一个虚拟机 d) 不用任何所谓安全软件,除非开源,这和c所说的其实是一个问题,这类软件权限过高了。e) 手机不越狱也不取得root权限,有多少好处也不。

个人经验介绍完毕,下面来讨论一下密码泄漏事件本身。

密码泄漏事件是典型的黑天鹅事件,这个说法来自一本叫做黑天鹅的书,大意是这类事件在发生前谁都不觉得会怎么样,但在某个时间点一定会出现并造成重大损失的事件。在今天这个时代,因为信息已经传递的足够快,所以黑天鹅事件会更加频繁的出现。这类事件,没什么避免的方法,除了清醒的知道自己在做什么之外,唯一能做的就是增强想象力,尽量多想一些可能性。从这个角度说,这次的密码泄漏事件其实是好事,如果没有这么大规模的密码泄漏,恐怕很多人根本不会想到竟然还有这样一种可能。

所谓清醒知道自己在做什么,就是在填写个人信息(包括但不限于密码)的时候你是否考虑过这些信息会被用于哪里,对方是否有能力保护其安全。前几天居委会跑来要登记个人信息,我要求对方出示这样做的法律依据和保密方法,对方拿不出来,我就客气的请对方走人了,对方居然也很配合的没多说什么。我相信很多情况都是如果你在乎一点,稍微追问一下,结果都会很令人满意。大部分企业是根本没有安全审计流程的。所以千万别太相信他们的保密承诺,就算他们真的想保密,是不是有这个能力也得打个问号。

所谓增强想象力,就是要多考虑一些可能性,比如在这次之前,如果你曾经想到过某个网站用户库在将来可能会被明文放在网上供人浏览,那么你就不会在不同网站用一样的密码。这时候也就不用慌乱一团四处修改密码。(在你慌乱一团修改密码时,如果你所在的网络环境不安全…后果只会更糟糕)

对于黑天鹅事件最好的办法就是增强想象力,多数人是缺乏想象力的。说到这里,我想再提起一下现在已经不那么热的Bitcoin。我对Bitcoin的态度一直是支持的。就算今天看起来不太火,我的态度仍然是支持。有些人嘲笑我这个立场,但到目前为止,Bitcoin体系仍然完备且运转正常,我不知道他们言之凿凿的说我在这个问题上”错了”是来自什么判断。我想这正”缺乏想象力”的具体表现。当确认一个东西没严重漏洞,确实可行之后,就不能轻易忽略它,更不能用以往经验轻易判断为不可能发生。而更应该想想”如果发生了”之后怎么办。再换个角度理解这件事,就算在Bitcoin这件事上我的判断错了,这并不会造成什么损失,对于我个人似乎就是损失了点电费,我毫无困难的可以承受这些损失,而万一将来真的有一天发生了某个极小概率的黑天鹅事件,Bitcoin就有可能成为主流应用。其实上一次Bitcoin突然很热的背后原因是Wiki Leak的捐款渠道被关闭,人们突然意识到需要一种不被限制的金融体系。Wiki Leak这件事本身就是黑天鹅事件。Bitcoin当然未必会成功,但现在断言其一定不成功的人,的确是太缺乏想象力了。今天我们所使用的互联网,也是黑天鹅事件。90年代我第一次用互联网时,其晦涩难用怎么也让人想象不到有生之年能够普及,但仅仅几年,对人们已经是和水电一样必不可少的东西了。

在《黑天鹅》这本书出现之前,没人体系化概括这种现象,但类似的看法倒是一直存在,比如地球同步卫星理论发明人兼科幻小说家AC克拉克有个说法,大意是:如果一个德高望重的科学家说某个事情”不可能”通常他是错的,如果他说”可能”那么通常他是对的。所以应该把”我们不知道”这种态度做为面对事情的常态,尽量多相信一些可能性。

在我看来,这次密码泄漏事件所引起的震动,与其说是安全问题,不如说是出乎多数人的意料造成的恐慌。这些密码库其实早就在各种渠道流传,只是多数人不知道罢了。甚至可以说如果要出事早就出了,根本不会等到现在。目前造成最大影响的是人们意想不到所以恐慌,而不是密码库泄漏本身。甚至在半年前Sony数据库泄漏事件都不会让与此无关的人多想一些”如果…”。目前首要任务甚至不是提高安全知识,而是提高想象力。我的确在很多年前就想到密码可能会明文被放出来,所以我用各种骂人和嘲笑的话组合做密码,用来调戏能看到密码的人,到今天这事情果然发生了。这就是想象力的意义。我想任何人只要之前想象过这种可能性,都会对自己的密码更加认真一点。

PS: 说起Bitcoin,我一直关心这问题本身,从这里面学习到的思考方式和架构知识足以让我值回实验投入了,比如http://www.slideshare.net/dakami/bitcoin-8776098 ,看看是不是很有趣? 作者Dan Kaminsky称的上是顶级安全专家了。这是不要轻易判断”不可能”的好处,跟踪一个看起来实现概率不大,但基础完备的事件,从中能学到很多有用的东西。

update: 看到了 delphij 这篇,顺路推荐 https://blog.delphij.net/2011/12/post-608.html

[…]

密码

CSDN 含有 600 万用户数据的密码库爆出来了,相信这是互联网上屈指可数的大事儿了吧?可是今天居然看到一张图片,各大国内网站的密码库都赫然在列;起初以为恶搞,直到大家都开始谈论知道了别人密码泄漏,知道大家都在改自己的密码。

登上饭否上的一个链接,把自己的邮箱输入进去,我操,自己的密码赫然出现;虽然只是个普通的人人网账户,但心里还是咯噔一下。

记得刚刚在上电脑课时就被老师教导,密码是很重要的东西,一定要有字母和数字,一定要定期想个新密码换上……但直到现在,坦白说,我还是在很多网站上用着同样的注册邮箱和密码,这是一个巨大的安全隐患;但谁知道,最大的安全隐患完全超出了我的预期,他妈的,丫们这些网站存着明文密码!

有人猜测,各大网站都有如此大量的用户明文密码,完全是一种监管压力。如果真是这样,有如此不负责任的监管者也是三生有幸。不多说了。

既然如此,看来各大国内网站的明文保存政策还存在着并且可能还会继续存在,所以我们也只好就此继续下去。不过像 QQ 令牌、淘宝登录短信验证之类的方式还是可以派上用场的。

所以,就此打住,大家过好冬至,改好密码。

三个事和三个问题

从9月份开始,是很多在校毕业生的择业时期,有很多很多朋友写邮件给我让我帮他们参考如何选择工作(对不起我无法在第一时间回信,因为实在是太多了,我那繁忙工作和生活都没办法让我能即时回复),并且还有一个已经工作了多年的技术很强的朋友因为跳槽没有跳好,也和我说了很多他 的感受。从这个过程中让我有了很多感触和想法想和大家分享,本来这篇文章1个月前就想写的,只是要写下来时不知道如何整理这么多的东西和思绪。今天也不知道,但是一定要写了,不然,我的这些感触和想法就会越来越不新鲜了。

注:这篇文章里的所有的故事都是真实的,其不可避免地会加上我强烈的个人情怀和个人色彩,叙述的过程可能比较乱,但我能确保这些都是我的肺腑之言。

第一个事:网友的来信

第一个故事是一个杭州的学生的故事,其有两个offer,一个是北京的(雅虎研发中心),另一个是杭州的一个做商业智能软件的公司,也是美国的上市公司。他在给我的来信内心纠结地说:

雅虎其实很想去,虽然这几年雅虎走下坡,但还是大公司,牌子硬,里面牛人也多,有助于自己水平的提升。但感觉北京环境不好,生活不是那么舒坦,也搞不定户口,所以我去的话也只能干个三五年就得考虑跳槽到别的城市安家落户了。这么一跳,在北京积累的各种资源却又带不走 。

杭州,比北京更适合生活,户口不是问题,朋友多,这个公司也比较宽松,有较多的业余时间跟朋友们一起搞点东西。而且这些年这个公司上升的势头,在国内设研发中心也才4年,规模不大,公司本身规模也还不大,我觉得机会还不错。再加上离家近,对家人大概可以多些照应。

关于未来换工作,雅虎做的是搜索,广告,移动互联这几个方面的,东西在互联网企业里面都比较通用,以后跳槽的话,面相对比较宽。杭州的那个做商业智能的公司,据了解其他做的比较好的也就几个大公司如SAP,IBM有这方面的业务。

我和这个同学发了邮件,也打了长途电话,我基本上是这样回复的——

1)户口,离家近,安逸的生活,相比起你的人生经历,你的眼界,你的发展,什么都不是。千万不要让户口限制了你的人生,如果要过安逸轻松的生活,最佳方案是进政府部门,既然要活在体制外,就一定是靠能力,靠经历,一定要有好的经历和能力。

2)眼界,眼界,眼界。这是我们这个国家里的人最需要的东西了,你的眼界决定了你的人生。我对杭州的这家公司一无所知,但是我知道雅虎的一些好处:a)互联网企业,其天地明显要比BI广阔很多,b)技术强,能人多(看雅虎的面试的难度以及一些产品就知道了),c)外企,可以练英语。d) 跨国公司,可以开眼界,或许会有出国机会。e)北京,几乎所有的知名公司都在这里有基地,这里的技术氛围在全国数一数二。为了经历和眼界,辛苦几年又有何妨?!人生还是需要有激情的。

3)经历,经历,经历。问自己一下,我们会在毕业的第一份工作呆上一辈子吗?不会吧。就算不喜欢北京,就算雅虎这个公司并不完美,但是雅虎的经历,能为你开启一个更为广阔的天地。

4)我认为一个有过几乎失败经历的公司会更牛。Apple被打趴下过,Amazon也被打趴下过,只有被打趴下过而又能站起来的公司和人才是真正伟大的。如果Yahoo还能站起来,它一定会是一个伟大的公司。

小伙子是个很聪明的人,也是个对生活有激情的人,所以,最后毁了“三方”选择了雅虎。他说:

最终选择雅虎的原因是,我觉得趁早年轻先出去看看,北京还是一个开阔视野的好地方。我要是一开始就选择杭州,以后估计不太会出去了,人生短暂,我还是希望多经历一些多体会一些。我从不畏惧在北京是否有户口,那里的房价是否承受的起,我觉得一个刚毕业的学生没必要太多的考虑这些问题,最重要的是考虑自己的发展。

而我的心情却有些复杂,一方面,我觉得一个人的一生可能就此被我改变了,我的心里很复杂。另一方面,万一他来北京不是很顺怎么办?会不会说我骗了他?在这里,我想对这个朋友说——“保持你的热情,努力开你的眼界,努力提高你的能力,你不可能走得不好的,就算雅虎有一天倒下了,也会有很多个更好机会等着你的,我会一直在你身边帮助你的”。

这样的来信还有很多很多,户口,薪资,是否去大城市,几乎都成了大家考虑的重点。这个年代实在是太浮躁了。我在此想告诉大家,对于你的人生你应该把“和什么样的人做什么样的事”提到你择业优先级最高的地位,没有之一。我的答案是,“和有激情能做事的人做有意义的事”。

生活在如此刺激的年代,一定要去经历那些最刺激最有意义的东西,这样人生才会变得有意义。

第二个事:Amazon的校园招聘

在Amazon校招的其间发生了一些有意思的事,比如:

1)在哈尔滨校招过后,我被公司里的一些同事亲切地称为“体型魁梧的男子”,呵呵。希望这位同学毕业的时候还能来Amazon面试,这样,我就能再“虐你一次”。哈哈。

2)这次Amazon的校招在北京,天津,西安,武汉,哈尔滨等地进行了招聘,大家知道我们用什么面试题来面这些快毕业的学生吗?我们用面试高级程序员的问题来面试这些刚毕业的学生(我和我的团队里的那些高级程序员说:“你们应该庆幸你们面试的时候没有被回这些问题”)。你知道我们有什么样的收获?主要有两点收获:

武汉的学生太给力了。你们的能力超出了所有其它城市的学生,包括北京。这让我们很诧异,搞得我们几个经理都在思考是不是要去武汉建Amazon的研发分部去了。我个人的分析是:武汉属于中心城市和北京等大城市的沟通相当地好,在这里的学生和在北京的学生有一样的眼界和技术氛围,但却没有在大城市的同学们的浮燥,能踏下心来专研技术。 学C++的同学比学Java的同学解决问题的能力更强。因为两个原因,a) C++需要了解系统知识,b) C++的程序员几乎什么事都得自己干。(参看我的《如何学好C语言》和《如何学好C++语言》,当然,Java还是很牛的,比如OO方面)

3)有一个同学接受了Amazon的offer后,给我来信诉说,给他打电话的经理告诉他要做的是测试为主的工作。然后,他给我发邮件来和倾诉,我说,如果你不喜欢,你就要说出来,不要将就,将就出来的人生只会平添许多烦恼和后悔。在此,我想在这里澄清两个事:

Amazon不会强行把你分配到团队中,只要你有想去的团队,你就应该说出来。我们一开始会内部做分配,这样做只是为了效率,但是这并不代表你已经被最终分配到那个团队中去了,无法再调整了。只要你提出来你想做什么。我们会把你的要求放在第一位,并尽最大的可能满足你的要求。相信经理们给你们电话的时候都说过这样的内容了。 Amazon所有的“蓝卡员工”(在Amazon工作5年以内的员工)在工作满一年后,可以有条件地在Amazon内部transfer。条件只有一个:你的工作业绩要很不错,在相同级别的员工中是中坚力量。你可以直接申请其它团队的招聘职位(这个其它团队包括了美国总部在内的全世界的团队),经过流程简单的面试就可以正式transfer。没有人可以阻止你,那怕是Jeff Bezos也无权阻止你。(这个政策要比北京户口更有价值吧?!Think it Big!)

4)最后一个有关校园招聘的事发生在我的团队。我觉得我可能要失去这个获得offer的学生了。他在腾讯和亚马逊之间更倾向于腾讯,因为他在腾讯实习过。他一开始的理由主要是,一个是户口问题,腾讯可以解决户口,另一个是他想做底层的C/C++,而不是Java。后面的理由又转变为腾讯的团队文化,等等。

我已经给他打过两次电话了,也和他说过许多,和第一个故事里说得差不多。对于是否做C/C++还是Java这方面的事,他和我说,他想在某一个领域成为一个专家。我对他说的这个专家有些模糊,我只是和他说——“软件的精髓不在于你对系统底层有多了解,也不在语言层面,而是在于设计和架构,而设计和架构这种东西只能靠多想多看”,我和他说,Amazon不是一个喜欢分享的公司,Amazon内部很多技术和设计水平可能是外部的人无法想像的。我希望他能来我的团队和大家工作一段时间真正感受一下,再做打算。(当然,要是他不明白这些事,我也觉得他不来也没有什么可惜的)

另外,我想对所有的人说:“这个世界上有两种公司,一种是“劳动密集型”的公司,另一种是“知识密集型”的公司,很多公司把软件做成了一种“劳动密集型”的活动,在那里永远无法做出能够让业界所震撼的东西,而有的公司才能把其做成“知识密集型”的公司,在那里,你会看到世界因为他们而改变”。如果你不能理解这句话的话,你不妨想像一个网上卖书的的公司干出连Google都赶不上的“平台”(参看“Steve Y的Amazon和Google平台论”),你不妨想像一个做MP3播放器的公司可以改变唱片业乃至改变世界。

不管这位同学最终能不能成选择我的团队的一员,我都会送你一本《Steve Jobs》,额外,我还会送你一件我团队自己制作的T恤(见下图,谢谢我的HR Recruiter当模特)。

第三个事:朋友的跳槽

我有一个普通朋友,几个月前跳槽去了一家正在高薪挖人的国内的快要准备IPO的公司。他们开出的薪水和条件非常地诱人。给我这个朋友的开出薪水和那个职位诱惑力太大了。一般人都很难拒绝。但是,当他入职了以后,他发现了这个公司内有很多东西是相当恶心和让他无法接受的,这个公司就可能连“劳动密集型”的公司都不算,非常发不重视技术,在技术上做的东西相当地不规范,在那里的技术人员不但相当地苦逼,而且干的事相当的垃圾,出了问题,所有的团队都在互相推诿,管理非常混乱。这让我的那个朋友非常地难受,在那里的每一天都是一种煎熬,而且他无法改变,高管也很难改变这种局面。整个公司在一种疯狂地暗无天日的状态下工作。我对这个朋友目前的善感到担忧。

但是,我想借这个事来谈谈我的想法。我承认薪水和职位是一种价值,但是,人生的价值只有这个吗?你一年少了那几万块钱,你也穷不了,你多了那几万块钱,你也富不了,为什么不去追求那些比那几万块钱更有价值的东西呢?对于我来说,我觉得,最有价值的东西就是——能和那些有梦想有追求有能力的人一起去经历那些最有意义的事情,那些能够造福社会、改变世界、创造历史的事情。

我从我的上一份工作到现在的工作,我的薪水不但没怎么涨,只是执平,而我的职位还比上一家公司降了一级(而且我还放弃两年内职位还可能再次晋升的机会),我管的团队从4个团队减到了一个很小的5个人左右的团队(现在我坚持小的团队做大事)。我来Amazon之前,这个事让我整整思考了2个多月。最终我发现,职位和薪水这些对我来说都无所谓,因为我是做事的人,而只有有意义的经历才能真正喂饱我。而我目前在Amazon里做的这个事,是可能改变历史的事,是那种可以让我一想起来就会兴奋的事。

我知道,价值并不仅仅只是名利权,对此我只想说,不要把自己给卖了。

三个问题

其实,我还有很多故事可以讲,只不过我写得太多了,差不多到文章该结束的时候了。那些事改天再说吧。我经历的这些事让我思考了很多很多。每年年底都是我情绪比较低沉的时候,因为,这个时候是我反思一年中的得失的时候,在这个时间段里,我会有一些不安,那种我害怕已经虚度了这一年的那种不安。

2011年的年底,我问了我自己三个问题:

1)每天早上醒过来的时候,我会为什么感到兴奋?是什么在驱动着我去开始新的一天?

2)现在的经历有没有让我有这种兴奋的感觉?这种让我充满力量和期待的感觉?

3)有没有浮燥,有没有得到认可?身边的人的认可?但更重要的是自己是否对自己认可?

我把我自己的这三个问题共享给大家,我有我的答案,相信你也有你的答案。

在2011年的年底,我希望大家的2011年没有虚度,而2012年能经历那些有意义的的事。

[…]

VIM之魅(下)

 

VIM之魅(下) Vim的方法

如果说Vim的理念是“减”字诀,那么实现这些理念的方法便是“增”字诀: 增加模式种类、增加移动方式、增加操作对象、增加操作方式、增加定制方式。

1. 增加模式种类

前文提到引入普通模式的重要意义,但Vim并未就此止步,还提供了另外四种基本模式: 选择模式(select mode)、可视化模式、命令行模式和ex模式。

选择模式与可视化模式的目的均是选择文本以备后续操作。前者类似Windows下的选择模式, 在方便程度与威力上远不及后者,故略去不谈。

在普通模式下,按下 v 、 V 、 Ctrl-V 将分别开启以字符、行或块为单位 的可视化模式,此后用户可以通过多次使用Vim的移动命令来选定所需文本。 例如,在普通模式下输入 v/the 并回车后,从光标初始处到此后最近的 the 之前都将被高亮。如发现并非所求,继续按 n 将使选择区域扩大到下一处 的 the 之前,以后还可多次用 j 或 k 来延伸或压缩所选区域的行,或者 反复用 h 或 l 进行左右微调,用 w 或 b 来增减被选单词, 用 f 或 t 确定字符,等等。 相比直接通过正常模式操作,可视化模式允许用户在对文本片段进行编辑 之前加以检视、调整和确认,因而更加直观、准确和安全,并且让所选文本成为 批处理的整体对象,增加了编辑效率,同时减少了操作的碎片化。 与用鼠标相比,若是操作短文本或规律明显的文本,速度多不及普通模式下的操作; 若是操作文本较长且不太规律的文本,则往往不及可视化模式下的操作。 比如,要选中从当前行到倒数第二行的文本,若中间相距较远,用鼠标定然慢而不便。 性急如我者,一不留神就可能把鼠标拖出桌面之外。 […]

我的Vim配置(三)

继续之前的Vim配置系列,这次我将介绍两个插件和PHP相关的配置

使用taglist来实现IDE中的outline功能

以前使用IDE时,有个很贴心的功能我很喜欢,就是把当前文件的类函数全部列出来,这样当你的函数很多时,能很方便的找到自己想要的,而不需要在代码里翻来翻去。taglist就是这样的一个插件,它使用ctags动态生成当前文件的tag并在一个新窗口里显示出来,你只需点击这个窗口里的函数名,就能快速定位到某个函数的开始位置,非常好用。安装也很简单,跟以前一样将这个插件放到bundle目录下,就能使用了。因为我主要使用MacVim,所以我添加了以下配置信息到.gimvrc里,使用起来更加方便。

1234 autocmd VimEnter * TlistToggle "启动时强制打开taglist窗口 let Tlist_Show_One_File=1 "一次只显示一个文件的tag,默认会显示所有打开过的 let Tlist_Use_Right_Window=1 "将taglist窗口放到右边,因为左边放了NERDTree,所以这条很有用! let Tlist_Compact_Format=1 "紧凑显示,在有限的窗口里可以多显示几行内容 使用snipMate减少你的敲代码字数

对于程序员来说,snipMate可是不可或缺的利器,它可以帮你自动完成一些代码片段,省去你不少敲击代码的时间,尤其是当你手动编辑html标签时,会觉得如释重负!比如当你输入div再按下tab键,一个完整的div标签就输入完整了,不需要一堆尖括号反斜杠等等重复烦人的输入,而且光标还会自动停留在id上等你来修改!

snipMate支持几乎所有主流语言,PHP,HTML自然不在话下,你可以放心使用!使用这个插件注意要在.vimrc中加入以下这行

1 filetype plugin indent on     "自动检测文件类型以调用相应的语法 让Vim能检查PHP语法错误

Vim默认带了PHP的语法高亮,但这还不够,它不如IDE那样能帮你自动检测语法错误,但要实现这功能也不难,在.vimrc文件里添加以下配置,就能使用CTRL-L键来检查语法,如果有错误,它会告诉你在哪一行。注意你的PHP路径可能和我的不一样。

1 autocmd FileType php noremap <C–L> :!/usr/local/bin/php –l %<CR> " 使用(CTRL-L)命令来检查PHP语法 让taglist能正确显示PHP的类函数

当使用taglist时,我发现它不能很好的支持PHP文件,每个方法和变量都显示了两次,在网上搜了下,发现这是ctags的问题,添加以下配置到.ctags文件,就能解决,注意这个文件是ctags的配置,和Vim没有关系。

12345678 -f ./tags -R –totals=yes –tag-relative=yes –PHP-kinds=+cf-v –regex-PHP –regex-PHP=/(^|^[^*]+[[:blank:]])class[[:blank:]]+([[:alpha:]][[:alnum:]_]*)/2/c/ –regex-PHP=/(^|^[^*]+[[:blank:]])function[[:blank:]]+&?[[:blank:]]*([[:alpha:]][[:alnum:]_]*)/2/f/ 让snipMate识别模版文件 […]

Category

Archives