代码如诗。 Code is poetry. ![]() Vim - the ubiquitous text editor 写代码本应该是很享受的事情,我们有极客高效的 Vim,简约美丽的 Sublime Text,从小至最为纯粹的编辑器,到大至包罗万物的 IDE。一个好的、美观的、高效的代码编写环境着实能够提高一个人的写作、创作欲望。试想一个人把 VC 6.0 放在你的面前,黑底白字、没有高亮、没有颜色,有谁会爱上 C / C++?如果有人在 2018 年向你推荐 1998 年的 IDE,那么你觉得这个人的脑子该如何拯救? ![]() 生命不息,折腾不止。 经过近 2 年的摸索,从高中的 Dev C++ 到大一开学时的 Codeblock 与 Sublime Text,到现如今的 Atom,我想总结一下:一个高效美观、能激发一个人创作欲望的代码编写环境到底是怎样配置出来的。以拯救那些大一刚刚开学,即将或是已经被 C 语言 / Dev C++ / VC 6.0 荼毒半年有余的同学们。 壹 → Atom Atom:A hackable text editor for the 21st Century ![]() Atom 首先,介绍工具:Atom 文本编辑器,由 Github 出品的基于 Electron / Node.js 的半开源文本编辑器。官网位于 -> https:/// 为什么我从一众优秀的文本编辑器中选择了 Atom,而不是 Vim,又放弃了我用了一年多的 Sublime Text? 开源。GitHub 上的大佬叫他是 Hackable 就不是吹的,配置文件是 cson,样式文件是 CSS 和 Less,所以理论上你可以把 Atom 配置成任何你想要的样子。 开箱即用。所谓的 Out-Of-The-Box Experience 说的就是 Atom。自带 4 组 UI 主题、4 组 Syntax 主题,自带 Markdown 渲染器、代码美化插件等等。 简单设置自带图形界面。无疑对我们这些 Spicy Chicken 很用户友好了,一些简单的设置是直接用下拉菜单的形式配置的,不需要打开诸如 vimrc 和 User.sublime-settings 然后费尽心思的直接改代码。 又为什么我选择了 Atom 而不是 IDE? 我只能说,就我们这些 Spicy Chicken 来说,写的代码还轮不到 IDE 的事情,毕竟刚开始的我们,C / C++ 一个项目不超过两个文件,一个文件不超过 500 行代码,用 IDE 来 cmake 一波岂不是很亏。因此我在 IDE 和轻量级可拓展的文本编辑器中选择了后者,又在文本编辑器中选择了半开源、可 Hack 的 Atom。以上。 贰 → 配置 Atom 成为写 C/C++ 的「IDE」 文本编辑器的最大的优势在于你可以通过开源社区下载,甚至自己编译开发「插件 - Plugin」来完善它,实现「开箱即用」中所没有提供的功能。 1. 写代码的时候 一个有情怀的 IDE 基本都会实现代码自动补全,代码实时编译纠错,以及代码高亮(为了美丽)和代码自动整理。很可惜,Dev C++ 没有,Codeblock 也没有。因此,我们要完善我们崭新的 Atom 来实现以上功能。 代码自动补全 Plugin: autocomplete-clang ![]() 代码实时编译 Plugins: linter, linter-clang, linter-ui-default ![]() 代码高亮 Themes,这里的问题主要在于个人审美,我相信一定有一个美丽的 UI 和配套的 Syntax 主题打动你。 ![]() 代码自动整理 Plugin: Atom-beautify ![]() 2. 写完代码之后 一个能正常操作的 IDE 都能通过,或是绿色箭头,或是组合键 Fn + F5 之类的方式编译运行。 在 Atom 里我们也可以实现: 编译运行 C/C++ 一键编译:script ![]() 插件 script 实际上是通过识别文件类型来执行对应的命令编译源代码。比如 C++ 的编译命令实际上是 [Command: bash -c 'xcrun clang++ -std=c++14 -Wall -include stdio.h -fcolor-diagnostics -include iostream '$Path_To_CPP_File$/Test.cpp' -o /tmp/cpp.out && /tmp/cpp.out'],通过快捷键 ⌘ + I 直接运行指令来编译。 ![]() 调出终端:platform-ide-terminal ![]() 如果不满意 script 一键编译运行的话,可以通过这个插件唤出终端,这样直接了当用 g++ -o $File_Name$ $File_Name.cpp$ 这一命令来运行,这时候程序也支持输入,与 Windows 下 Dev C++ 中默认运行调出 Command Prompt 小黑框一般道理。同时这样也方便用 gdb 来进行调试。 3. 一个有情怀的工作流开发者的加成 在 ACM 中,每段代码都是有标准输入和标准输出的。在 C / C++ 中我们可以通过这样的代码片段来读取输入:in.txt 并将程序输出、程序运行时间写入文件:out.txt。在保证 C / C++ 源代码和两个 TXT 文件再同一个文件目录下,这段代码是这样的: #ifdef SUBMITfreopen('in.txt', 'r', stdin);freopen('out.txt', 'w', stdout);long _begin_time = clock();#endif/* your code here */#ifdef SUBMITlong _end_time = clock();printf('time = %ld ms', _end_time - _begin_time);#endif 同时要在头文件定义时加入:#define SUBMIT //本地运行这行留下,提交代码直接注释掉 这样在 Atom 中就可以形成工作流:代码区域 - 编写 → 输入内容 in.txt → 编译代码 → 查看输出文件内容、运行时间 out.txt ![]() 直观纯粹,效率优先。 ![]() 最后,上成果。这样的 Atom 配置在写 C / C++ 基础程序的时候,基本实现了: Linter: 基于 clang 的实时编译 代码高亮与自动补全 代码自动优化美化 一键编译运行 终端调试 我相信,这样的配置不仅完美的适合小型项目的编写,还能极大的提升对代码的敏感和热爱。至少,这种解决方式,比 Dev C++ 和 VC 6.0 体面,也比 Visual Studio 和 CLion 纯粹、轻量。 感谢阅读。 鞠躬。 |
|