Vim整合AStyle进行代码美化
2016-01-12 14:19
381 查看
1、AStyle格式化代码
安装AStyle,并把bin目录加入环境变量中
在vimrc中加入以下设置代码
解决了代码风格后,是否就可以算做漂亮的代码了呢?
要知道再漂亮的衣服穿到胖子身上,也漂亮不到哪去(阿门,原谅我吧)。对于代码来说,符合代码风格只是第一步,漂亮的代码还要易于理解。让人容易理解的话,单个函数的代码行就不能太长,嵌套层数就不能太多,分支条件判断不能太多。这些工作不是代码风格能解决的。我们需要能够自动检查代码质量的工具-SourceMonitor。
SourceMonitor是一款代码质量检查的软件。能够检查文件中函数的个数,每个函数的代码行数,注释比例,函数的调用深度,圈复杂度等。
其中需要最关键的是每个函数圈复杂度和每个函数的代码行数。圈复杂度是指函数中可独立执行的路径,因此函数中每出现一次if/else/while,switch/case/break等,圈复杂度就加1.圈复杂度越高,说明函数中可执行的路径越多,也就越复杂。超过一定值如(15或者10)以后就要考虑能否将函数重构了。此外一个函数的代码行数如果太长,不能一屏显示的话,不容易让人记住和理解,也需要对该函数进行提炼。
3 Eclipse的半自动重构
利用SourceMonitor找出需要重构或提炼的函数后,难道又要我手工重构吗,有没有重构的工具呢?全自动的目前还没见过,如果有同学见到,请留言。相比来说,半自动的重构工具还是比较多的,Eclipse中就有一个重构菜单,提供函数提炼,变量或方法重命名等不少基础的重构功能。
Eclipse的半自动的重构能减少人工重构的错误,降低开发人员所耗费的精力,这也是为什么一个我作为C/C++程序员越来越喜欢Eclipse的原因。
4、VisualStdio可以使用StyleCop进行代码审查
安装AStyle,并把bin目录加入环境变量中
在vimrc中加入以下设置代码
"调用AStyle程序,进行代码美化 func CodeFormat() "取得当前光标所在行号 let lineNum = line(".") "C源程序 if &filetype == 'c' "执行调用外部程序的命令 exec "%! astyle -A3Lfpjk3NS\<CR>" "H头文件(文件类型识别为cpp),CPP源程序 elseif &filetype == 'cpp' "执行调用外部程序的命令 exec "%! astyle -A3Lfpjk3NS\<CR>" "JAVA源程序 elseif &filetype == 'java' "执行调用外部程序的命令 exec "%! astyle -A2Lfpjk3NS\<CR>" else "提示信息 echo "不支持".&filetype."文件类型。" endif "返回先前光标所在行 exec lineNum endfunc "映射代码美化函数到Shift+f快捷键 map <S-F> <Esc>:call CodeFormat()<CR>2 SourceMonitor:识别坏味道
解决了代码风格后,是否就可以算做漂亮的代码了呢?
要知道再漂亮的衣服穿到胖子身上,也漂亮不到哪去(阿门,原谅我吧)。对于代码来说,符合代码风格只是第一步,漂亮的代码还要易于理解。让人容易理解的话,单个函数的代码行就不能太长,嵌套层数就不能太多,分支条件判断不能太多。这些工作不是代码风格能解决的。我们需要能够自动检查代码质量的工具-SourceMonitor。
SourceMonitor是一款代码质量检查的软件。能够检查文件中函数的个数,每个函数的代码行数,注释比例,函数的调用深度,圈复杂度等。
其中需要最关键的是每个函数圈复杂度和每个函数的代码行数。圈复杂度是指函数中可独立执行的路径,因此函数中每出现一次if/else/while,switch/case/break等,圈复杂度就加1.圈复杂度越高,说明函数中可执行的路径越多,也就越复杂。超过一定值如(15或者10)以后就要考虑能否将函数重构了。此外一个函数的代码行数如果太长,不能一屏显示的话,不容易让人记住和理解,也需要对该函数进行提炼。
3 Eclipse的半自动重构
利用SourceMonitor找出需要重构或提炼的函数后,难道又要我手工重构吗,有没有重构的工具呢?全自动的目前还没见过,如果有同学见到,请留言。相比来说,半自动的重构工具还是比较多的,Eclipse中就有一个重构菜单,提供函数提炼,变量或方法重命名等不少基础的重构功能。
Eclipse的半自动的重构能减少人工重构的错误,降低开发人员所耗费的精力,这也是为什么一个我作为C/C++程序员越来越喜欢Eclipse的原因。
4、VisualStdio可以使用StyleCop进行代码审查
相关文章推荐
- myeclipse自动关闭问题
- Java输入输出(用于比赛)
- 4000 java实现字符串逆向输出(续)
- go web 第二天 学习笔记之文件上传
- 不得不看的Java代码性能优化总结
- Thinkphp中查询复杂sql查询表达式,如何表达MYSQL中的某字段不为空is not null?
- PHP代码优化的40条建议
- Delete characters删除两个字符串中相同的字符
- JAVA的反射机制学习笔记(二)
- Java Lambda表达式
- python的 __name__和__doc__属性
- 自学Python二 Python中的屠龙刀(续)
- 读书笔记:Java并发实战第15章 原子变量与非阻塞同步机制
- qtcreator +vs2013 开发xp下使用的程序
- php文件上传后台存储中文乱码问题解决方案
- Xcode 显示代码行数
- xcode 把项目代码提交到远程SVN服务器
- GooglePlay_下载apk
- Github for Windows:Commit failed: Failed to create a new commit
- Java环境变量(二)