标签 博客 下的文章

使用astyle美化代码

昨天一位同事发了一篇小文档,文档中介绍了一种开源格式化代码的工具,名为Artistic Style(astyle),功能看起来还是很不错的。之前我写代码时比较注意代码的风格,一直按照自己的思路来美化自己的代码,用的最多的辅助工具就是Vim自带的indent功能,对这之外的格式化工具少有涉猎。记得几年前部门曾推广一款名为checkstyle的Java代码格式规范检查工具,由于当时基本不接触Java,也没有用过。

今天被问及该工具是否可以在组内推广,遂又花心思想了一下。看了同事的介绍文档,感觉astyle还是很实用的,特别是对现存遗留的格式不规范的代码文件,可批量做转换(之前我都是修改哪个源文件时顺便对格式进行美化,浪费了我不少精力) 但是如何能被大家接受和使用起来,这还是一个问题。最开始想到的是让astyle与svn结合在一起,对开发人员保持透明。通过svn hooks来自动完成对代码的格式化。不过细致研究后发现,这样是有问题的。如果在svn server端增加svn pre-commit hook来调用astyle对提交的代码进行格式化,那么这势必可能导致开发人员提交后的server端代码与其Local copy不一致;如果开发人员不知情,后续就会导致进一步的代码不一致问题。另外在svn官方manual中似乎也不推荐在svn pre-commit hook中修改提交的文件内容,好像是会破坏svn commit事务(导致本地和服务器端的一些对文件的统计不一致)。又考虑在客户端svn hook,可查来查去才发现目前只有TortoiseSVN的实现支持客户端hook,遂放弃。

让大家直接执行astyle,显然是高估了大家的执行力了。遂想到还是将astyle与Vim集成在一起吧。

步骤如下:
1、编译artistic style源码,将astyle的可执行程序放到某个目录X下,并将目录X放到path中(ubuntu上可用sudo apt-get install astyle安装)
2、编辑.vimrc,添加一行map :%! astyle  (Shift+F 注:在当前缓冲区用astyle美化缓冲区中的内容,并输出结果到当前缓冲区中)
3、定义模板option文件,位置:$HOME/.astylerc

以下是一个.astylerc的例子:
# my astyle options file

–indent=spaces=8
–brackets=attach
–indent-switches
–indent-cases
–indent-labels
–indent-preprocessor
–indent-col1-comments
–pad-oper
–pad-header
–unpad-paren
–add-brackets
–keep-one-line-statements
–align-pointer=name
–mode=c
–min-conditional-indent=0

按照以上方式集成astyle到vim中有一个缺点:就是每次美化都是针对当前缓冲区(一般就是一个文件)。无法做到对某几行或一块区域进行代码美化。

后在stackoverflow上发现有一人提出这样的方案:在.vimrc中增加一行:autocmd BufNewFile,BufRead *.c set formatprg=astyle\ -T4pb。最初以为这样设置是使用astyle替换vim内置的c indent格式化工具,遂照猫画虎配置后用"="命令进行测试,发现无法格式化;遂花时间研读Vim手册,终于发现是我的理解错了。formatprg这个option是与gq命令联系在一起的,而非关联"="命令。以前的确不怎么使用gq命令,而是一直用c indent("=")来做所谓的格式化操作。利用对formatprg这个option的设置可以做到利用外部工具对vim当前文本buffer做格式化的目的。因为之前已经配置了$HOME/.astylerc,所以在.vimrc中增加一行:autocmd BufNewFile,BufRead *.c set formatprg=astyle,去掉了-T4pb这几个参数。

生效.vimrc后使用gq命令对.c文件进行测试,果然有效。gq命令不仅支持对Whole Buffer进行filter,而且可以对单行、多行以及对块文本进行格式化过滤,比如:
NORMAL模式下: gggqG 即对Whole Buffer进行格式化过滤;
 gqG  对从当前行到末尾行之间的文本进行格式化过滤;
 gq+1 对下一行文本进行格式化过滤;
 gqj  对当前行和下一行文本进行格式化过滤;

与Vim结合在一起最大的好处是:astyle被透明的引入到我们日常开发过程中了,你的工作量并未因astyle的引入而增加,反而astyle却提升了你的工作效率,不是吗?

快乐的“阿根廷梅西”回来了!

昨晚2010年南非世界杯B组焦点战潘帕斯雄鹰阿根廷队凭借老将海因策的头球小胜尼日利亚,取得开门红,作为阿迷的我来说,我的2010世界杯从这场比赛起才正式开始。

一场比赛的胜利完全不足以将阿根廷与夺冠联系在一起,阿根廷队还有很多问题亟待解决。从阿迷角度去看其实这场比赛更大的意义在于:我们收获了一个快乐的“阿根廷梅西”。这场比赛中那个在巴萨无所不能、进球如探囊取物的梅西似乎又出现了,梅西几乎参与了阿根廷队所有的进攻,除了通过超强的个人能力威胁对方球门之外,梅西还多次给队友创造出绝佳的得分机会。

与之前的国家队比赛不同,这场比赛中的梅西恢复了在国家队中消失已久的活力与灵性。场上的梅西完全融入了比赛,就像在巴萨那样,为足球带来的快乐而投入、为了团队的目标而投入,人们已经看不到之前在世界杯预选赛阶段梅西脸上的那种阴郁和困惑。无论是普通球迷还是专业人士都一致认为只有在球场上感受到快乐的梅西才是那个威力无穷的天才梅西。而这场赛后大家都不约而同的感受到了:快乐的阿根廷梅西回来了!


快乐的“阿根廷梅西”回来了!

梅西需要时间来融入阿根廷队,融入是快乐的前提。之前给梅西的时间真的太少了。这场比赛之前,梅西与队友们一起生活和训练了将近一个月,这似乎是梅西作为核心与队友们合练时间最长的一次了。就是在这一个月里,梅西通过与队友们长时间一起训练和生活培养起来了友谊,一起参加比赛建立起了互相的信任;甚至作为小弟的梅西还受到了多位阿根廷老大哥们的指导和呵护。有了这些,就有了大家庭的感觉,就如在巴萨。

这是梅西穿上伟大的阿根廷10号球衣参加的第一场世界杯比赛,对于梅西来说意义重大,这是第一次作为核心参加世界杯,通过个人努力,这完全有可能成为一届属于他的世界杯;对于阿根廷队来说,大家都希望赛场上梅西能成为1986年的那个马拉多纳,把大力神金杯第三次带回阿根廷。但希望归希望,比赛还得一场一场打;梅西还得继续通过比赛寻找与队友之间的默契,树立核心地位,获得队友的信任,让战术布置中的核心变成足球场上真正的核心。阿根廷队还需要通过不断总结比赛,提高自己,扬长避短,才能走得更远。

既然满怀激情的看了阿根廷对尼日利亚的比赛,就不能不说说自己对这场比赛的想法,主要是说一下看到的阿根廷目前的瑕疵之处:
1、进攻过于依赖梅西
2、忽略了球场的宽度,边路无法充分展开(左路迪马利亚上半时消失也不全是迪马利亚的问题,攻击线过于集中于中路)
3、中场防守厚度严重不足,尼日利亚可以轻松获得很好的反击机会
4、右后卫位置太不稳妥了,不是被突破,就是易犯规而给对手前场任意球,如果面对是一流强队,这将是致命的。

首发球员逐一说说:
梅西:阿根廷最亮那颗星,有些时候太想进球了,反倒影响了思维和技术动作,如果能将心情放的再平静些,那就无敌了。
特维斯:的确够勇猛,但是希望不要太粘球,快出球,也许能收到更好的效果。(经常看到特维斯因粘球,出球慢而被断球)
伊瓜因:有些让我失望。本以为他能继承巴蒂衣钵,不过从比赛来看确是欠缺些火候,不过他还年轻,这就是资本。

迪马利亚:上半场的确少见其身影,不过下半场那次与梅西的心有灵犀体现出其技术特点,老马可考虑多多大大左路,让其和梅西多配合配合,北京奥运会就是梅西与迪马利亚把阿根廷队送上了最高领奖台。
贝隆:除了角球助攻海因策得分,贝隆在中路的防守和进攻真的没有什么亮点,比巴萨的哈维真不在一个档次。贝隆的确老了。马大帅应该考虑适当时刻给帕斯托雷一些出场机会了。
马斯切拉诺:中场唯一防守屏障,重任在肩,中规中矩。

海因策:打入唯一进球,起到了老将的作用。
德米凯利斯:让人不放心啊!
萨穆埃尔:后防线上唯一还值得信任的老将了。
古铁雷斯:差点被打爆,出身中场的古铁雷斯在右后卫的位置极其不适应,老马最该调整的就是这个位置了。为何不让专职后卫的奥塔门迪出场呢?

罗梅罗: 1.91米的身高是优势,不过说实话,看他的比赛较少,反应是否敏捷本场没有足够的考验。

马拉多纳:让梅西恢复神力,说明老马的工作没有白做。

回归快乐的阿根廷梅西值得期待!与以往不同,此次我们的阿根廷不是热门,不在死亡之组,我们也不谈夺冠。我们只是默默的支持阿根廷,默默的支持梅西。(如果真的逃不过世界杯魔咒效应的话,那我也希望能看到梅西率领的阿根廷在最后决赛中英雄般的倒下)。

最后推荐下面三首世界杯歌曲,个个激情四射,符合世界杯足球的那种感觉:
1、2010南非世界杯FIFA官方主题曲-哇咔哇咔(非洲时刻)
2、Waving Flag
3、旗开得胜(Waving Flag的中文版)

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats