Qt如何使文件重新格式化
本文也可以作为Uncrustify的设置向导。
作为一个程序员,就会经历各种令人痛心疾首的问题。有时候需要经手别人的代码,有人喜欢命名全部小写,有人喜欢下划线命名法;有人的tab是三个空格,有人的tab是一个四格的缩进......
在这种恶劣的环境下,只有能忍受所有编码风格的程序员才能生存下来。
但如果真的是只能如此,那这个世界上的程序员估计就所剩无几了。
好在,我们能非常快捷地使文件格式化
在Visual Studio、Intellij Idea这种大型的IDE中都能够设置诸如此类的快捷键,不深入研究。这里要说的是Qt中代码格式化的操作方法。
Qt是跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器,是一个非常优秀的IDE,我个人非常喜欢。但是我发现了一个问题,Qt自带的快捷键并不能使代码格式化。点击菜单栏中的工具->选项->环境->键盘中,我们可以找到一个有关代码格式化的快捷键设置项,如下图所示:
但是设置后会发现怎么使用都没有用。但是我们不能就这样放弃啊!否则程序员就要灭绝了!
经历千难万险,我终于找到了解决方法。
这里我们要用的插件是——
Uncrustify
这里要注意,如果你没有Beautifier这个选项,那么你可能要升级你的Qt到最新版。
它提示需要重启,我们就重启一下,然后点击菜单栏中的工具->选项,发现左边的工具栏里多出了一个高跟鞋,界面如下:
根据上面的选项卡可以看出,Qt的Beautifier支持三种插件,分别是Artistic Style、Clang Format和这里要讲的Uncrustify。选择这个是因为它的设置方法相对简单。
下载方式:能*的话可以从Sourceforge下载,否则可以尝试从github上下载,但我下载这个非常慢,半天也下载不了,不知道为什么,这里贴出下载链接:Github。
二者的内容应该是一样的,而且更新非常频繁,Sourceforge上甚至可以订阅他们的邮件以随时获得最新版本的Uncrustify,操作方法就是直接点击如下页面中的Get Updates,再填入邮箱即可。
下载以后解压,然后进入刚才Beautifier的选项页面,点击Uncrustify选项卡中的浏览,选择解压出来的uncrustify.exe文件,单机确定。
现在,我们再进入快捷键设置页面。点击菜单栏中的工具->选项->环境->键盘,可以发现多了很多可以设置的选项。由于我们使用的是Uncrustify,所以这里修改Uncrustify中的FormatFile快捷键,如下所示:
点击应用并确定。
还没完!
我们先来测试一下。新建一个C++工程,随便写一段程序,然后使用格式化快捷键,会发现下面跳出了一行报错:
Running Windows Runtime device detection.
No winrtrunner.exe found.
Error in Beautifier: Cannot get configuration file for Uncrustify.
意思是找不到配置文件。原来Uncrustify可以同时设置多种格式,它提供了一些现成的,也可以让我们自己配置。
我们打开Uncrustify的安装文件,进入 cfg 目录,会发现有众多 .cfg 文件,支持各种不同的语言和系统。这里我选择对default.cfg 进行修改,以满足我个人的编程喜好。为什么选择它?因为它的文件大小最大。
使用文本编辑器打开这个cfg文件,会发现里面有众多的配置项,而且都有英文解释,下面将挑选一些常用的组合进行说明。需要注意的是,很多的参数之间会有联系,有时候只修改一个参数可能会没有任何效果,或是效果超出预期。这里需要重视我之后将提到的参数之间的关联。
修改换行格式
参数名: newlines 。
早期的Mac使用的是回车(CR),后来换成了Linux使用的换行(LF)。而Windows推出的换行格式为回车换行(CRLF)。听上去很强,但是建议不要尝试,不知道是不是BUG,反正如果在这里设置成CRLF会发生很可怕的后果。
建议:auto。
修改tab的形式
参数名: input_tab_size 、 output_tab_size 、 indent_columns 、 indent_with_tabs 。
input_tab_size不知道是干嘛的,怎么设置都没用。output_tab_size跟代码中的缩进有关,但是也不知道具体是什么,经过测验感觉跟tab大小成反相关。想要详细了解就需要查看Github中的源代码,这里的建议直接给出“将tab修改为4个空格”的设置方式。
建议:8、8、4、0。
修改转义符
参数名: string_escape_char 。
这里的参数的值应填写想要设置的转义符号的ASCII值。绝大多数语言是“\”(92)或“^”(94)。
建议:92。
特殊字符编码的处理方法
参数名: utf8_byte 。
如果是true,那么在一个文件中如果包含了值在128~255之间的字节,如果它不是用utf-8编码的,那么按照utf-8编码格式来处理它。这个只有在特殊领域才有用,一般情况下很难碰到这样的情况。
建议:false。
强制输出编码为utf-8
参数名: utf8_force 。
它可以强制程序的任何输出都为utf-8,对于不愿意花精力在处理编码格式上的程序员很有用。但是个人觉得还是不要依赖这个工具,否则到时候程序出了问题,谁能想到问题是出在这个配置文件上呢?
建议:false。
在加号、减号等运算操作符两边添加空格
参数名: sp_arith 等。
个人觉得 x = y + z 要比 x=y+z 好看一点。可能在博客里没有很强烈的感觉,但是在代码里,添加空格的方式会使代码非常清晰。这个参数的add和force在实际测试中好像没有什么区别。类似功能的参数还有 之后几个“sp_”开头的字段,有一些是负责重载的,也就是更精细地对不同符号进行设置,有些是对不同的版本进行配置,还有的是可以单独设置符号前或符号后的空格,可以自行研究。
建议:add。
这里可以设置的空格添加位置有:"+", "-", "*", "/", ">>>", "<<", ">>", "%", "|", "=", "+=", etc, ":", "##", "#", "&&", "||", "<", ">", "==", etc, "(", ")", "((", "))", ")(", "()", "{", "}", 指针"*", "&", "|", "if", "for", etc, "[", "]"等等等等太多了,个性化能力非常强,自行研究吧!
总之,这个插件的设置非常灵活,包含了上千个项目,并且还在不断更新,你能想到的应有尽有。以后可以专门做一篇研究这个插件的文章。
回到主题!
当我们将一切的参数设置好以后,保存我们的cfg文件,然后进入刚才Qt中Beautifier的选项页面,点击Uncrustify选项卡中Options组里的浏览,选择刚才编辑过的配置文件,再将复选框勾上,如下图所示:
这样就算配置完成了!
我们来用一个简短的代码测试一下:
点击Ctrl+Alt+L,也就是我设置的快捷键,代码就被重新格式化了。
这样,Qt也可以被漂亮地格式化啦!