啰里啰嗦说了一大堆 …… 但这篇文章其实不仅仅是个编辑器编程环境的配置教程,也简单介绍了一些常见的概念,并谈了谈我个人对其的理解。
IDE 漫谈
对于刚入门的同学来说,集成开发环境 ( IDE , Integrated Development Environment ) 是一个很好的选择,但是长期使用 IDE 可能会影响我们对文件系统的理解。
- 常见的 IDE 有微软公司 ( Microsoft Inc. ) 的 Visual Studio 和苹果公司( Apple Inc. )的 Xcode , 它们功能丰富各有千秋,但是只能在自家的系统上很好的运行,虽然 Visual Studio 已经有了 MacOS 版本,但那实际上只是个半成品,很多语言都还不支持。
-
总部位于捷克共和国首都布拉格的 JetBrains 公司发布的 CLion、PyCharm、 IntelliJ IDEA 等跨平台的 IDE ,在 Windows、 MacOS、 Linux 系统上都能很好的运行。
-
这些优秀的 IDE 在资深 coder 手里能发挥出更高的效率,但是它们大多体积臃肿甚至能达到10几个G。而且优秀的 IDE 一般都不是开源软件,上述的 Visual Studio 价格感人,JetBrains 的订阅价格也不低 ( 学生和老师用学校邮箱订阅可以免费 ) , Xcode 虽然是免费软件,但前提是你得买个 Mac 。
- IDE 往往都是一键编译运行然后 debug 的,在操作上方便不少。但是习惯于 IDE 操作的同学在服务器上面对黑乎乎的命令行往往就不知所措了,搞不清文件之间的依赖关系。我相信经过学习文本编辑器的配置后,会对编译过程有更加深刻的理解。
Editor 漫谈
最常见的文本编辑器 ( Editor ) 可能就是 Windows 上的记事本了,用过 Linux 系统的同学可能还知道 Vi/Vim 和 Emacs,我之前就有一篇文章总结了一些 Vim 的常用命令。 Vim 和 Emacs 是两款历史悠久的文本编辑器,都有着 “编辑器之神” 的称号。
-
Emacs ( Editor Macros , 编辑器宏 ) 的作者是 GNU 革奴计划 ( gnu 在英文中原意为非洲牛羚,发音与 new 相同,GNU 应当发音为 Guh-NOO 以避免与 new 混淆 ) 的创立者、自由软件运动的精神领袖、著名黑客 — 理查德·马修·斯托曼 (Richard Matthew Stallman)。
这里简单介绍下 GNU ( “GNU is Not Unix” 的递归缩写 ) 系统,它是革奴 ( GNU ) 计划的主要目标,一个自由的操作系统,它的内容软件完全以 GPL ( GNU General Public License , GNU 通用公共许可证 ) 开源发布。
我们熟知的开源系统 Linux 就是包涵了 Linux 内核与一些 GNU 组件和软件,比如 GNU 编译器套件 GCC ( GNU Compiler Collection ) 和 GNU debug 调试器 GDB 以及文本编辑器 Emacs , 所以有人认为 Linux 系统的正式名称应该是 GNU/Linux 操作系统。 -
Vi 是 Unix 及 Linux 系统的标准编辑器,由伯克利的计算机科学家 Bill Joy 创立。而 Vim 在 Vi 的基础上改进和增加了很多特性,被推崇为类 Vi 编辑器中最好的一个。
开始 Vim 的目标只是在 Amiga 计算机上完全复制 Vi 的功能,那个时候的 Vim 只是 Vi Imitation 的简称,1992 年 1.22 版本的 Vim 被移植到了 UNIX 和 MS-DOS 系统上。从那个时候开始,Vim 的全名就变成 Vi Improved 了。
Vim 的劲敌来自 Emacs 的不同变体。1999 年 Emacs 被选为 Linuxworld 文本编辑分类的优胜者,Vim 屈居第二。但在 2000 年 2 月 Vim 赢得了 Slashdot Beanie 的最佳开放源代码文本编辑器大奖,又将 Emacs 推至二线。
总的来看, Vim 和 Emacs 在文本编辑方面都是非常优秀的,但是他们的 GUI ( Graphical User Interface , 图形用户界面 ) 做得都不太适合鼠标操作 ( 比如 Mac 版的 MacVim , 尽管有了很大进步,但是鼠标操作还是很不方便 ) ,习惯了鼠标点击的初学者学起来可能有困难。
所以我在这里推荐两款优秀的跨平台文本编辑器 Sublime Text 和 Visual Studio Code !
Sublime Text 配置
Sublime Text 其实是一款收费软件,但是即便不激活也不影响你的正常使用,只是偶尔会弹出提示框提醒购买许可证,收费是 $80。
主题、字体、文件图标等美化插件的配置我都不详细讲了,我个人比较喜欢 Monokai 配色,几乎所有编辑器和 IDE 我都用了这个配色。在这我主要讲一下 Sublime Text 自带的编译系统。
系统编译器
- MacOS 和 Linux 系统配置起来比较容易,简单几步就可以完成:
-
两者系统一般都自带了 Python 2.X , 如果想用更新的版本,如 3.6 或者 3.7 ,可以去官网 https://www.python.org 下载,或者安装 Anaconda 进行配置;
-
至于 C/C++ , 不同版本的 Linux 系统使用它们自带的安装包管理工具,如 apt ( Advanced Packaging Tool )、rpm ( Red-Hat Package Manager )、 yum ( Yellow dog Updater, Modified ) 直接 install gcc、gdb 等组件就好了。
Mac 系统则可以使用自带安装包管理工具 Homebrew 来 install ,或者直接在 App Store 里下载 Xcode ,安装完就自动配置好 C/C++ 的环境了。值得一提的是,有的系统版本的 Mac 可能无法正常运行 gdb ,所以推荐直接下载 Xcode ,就算用不到 IDE ,但是 Xcode 配置好的 Clang 和 lldb 可以取代 gcc 和 gdb 在 Mac 下很好的工作。安装 Xcode 后的 Mac 在终端使用 gcc/g++ 其实就是在使用 Clang 的别名。
这里简单介绍下 LLVM 构架编译器 ( compiler ) 框架系统,它的命名最早源自于底层虚拟机( Low Level Virtual Machine )的缩写,由于命名带来的混乱,目前 LLVM 就是该项目的全称。LLVM 计划启动于 2000 年,最初由美国 UIUC ( University of Illinois at Urbana-Champaign , 伊利诺伊大学厄巴纳-香槟分校 ) 的 Chris Lattner 博士主持开展,以 C++ 编写而成,用于优化以任意程序语言编写的程序的编译时间、链接时间、运行时间以及空闲时间,对开发者保持开放,并兼容已有脚本。2006 年 Chris Lattner 加盟 Apple Inc. 并致力于 LLVM 在 Apple 开发体系中的应用。Apple 也是 LLVM 计划的主要资助者。项目中的 Clang 和 lldb 等软件也兼容 GNU 规范,已经广泛被用于 苹果 IOS 开发工具、Facebook、Google 等各大公司。
-
- Windows 系统稍微麻烦一些,而且注意 Windows 路径使用的是反斜杠
\
分隔:
-
如果之前下载过 Dev-C++ 或者 Code::Blocks 等 IDE ,可以使用它们自带的编译器,只要配置好路径就行了。
-
没有用过 IDE 的同学可以下载 MinGW ( Minimalist GNU for Windows ), 通过它下载配置 GCC 和 GDB 等 GNU 组件,记得下载完将 MinGW 安装目录下的 bin 文件夹添加到系统环境变量 PATH 里( Win10系统:
桌面-此电脑-右键-属性-高级系统设置-高级-环境变量
) ; -
Python 可以到 https://www.python.org 官网下载,也可以直接下载 Anaconda 进行配置,记得也要添加安装目录里的 python.exe 的路径到系统环境变量 PATH 里。注意在 Windows 的 PowerShell 里无法直接
conda activate base
激活 base 环境, 目前的解决方案是使用 CMD 来执行该命令。
-
Sublime Text 编译系统
打开 Sublime Text,选择 工具-编译系统
可以看到自带的多种编译系统,其中可能有的能够正常使用,而有的不能,对应的配置文件在安装目录下找到 Packages 文件夹 (或者利用 PackageResourceViewer 插件来查看),里面有很多 XXX.sublime-package ( XXX 是对应语言,如 C++、Python 等 ) 文件,这些其实就是 zip 压缩文件,复制一个出来将后缀名改为 .zip 就可以解压看到里面的 XXX.sulime-build 文件。
一般不推荐直接修改自带的编译系统,但是如果想把自己改过的 .sublime-build 文件放入 .build-package 中,可以使用 zip
命令:
sudo zip -d XXX.sublime-package XXX.sublime-build
: 删除原有的 .sublime-build 文件;sudo zip -g XXX.sublime-package /path/to/XXX.sublime-build
: 将新的 .sublime-build 文件放入;- 重启 Sublime Text 就 OK 了。
我们也可以新建自己的编译系统,选择 工具-编译系统-编译新系统
就会生成一个新的 xxx.sublime-build 文件,其实这就是一个 JSON ( JavaScript Object Notation , JS 对象简谱 ) 文件,是一种轻量级的数据交换格式。我给出一个 Python 编译系统的模板:
{
"encoding": "utf-8",
"working_dir": "$file_path",
"shell_cmd": "/usr/bin/python -u \"$file\"",
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"variants":
[
{
"name": "Run",
"shell_cmd": "/usr/bin/python -u \"$file\"",
}
]
}
看上去很简单,主要就是要将编译器路径配置正确。
这里简单提一下 python 的 -u 参数,python 的标准错误是直接输出的,但是标准输出却要先停留在缓冲区等待,-u 参数可以让标准输出不停留在缓冲区而直接输出,所以一般都会把 -u 这个参数加上。
后面的 “variants” 标签部分其实就是 Sublime Text 里的编译 ( Compile ) 和运行 ( Run ) 的区别,标签外就是 编译
执行的部分, 而 “variant” 内就是 Run
执行的部分 ( 当然,对于 Python 这种解释型语言没有什么区别 )。进入 偏好设置-首选项-浏览程序包
,打开 User 文件夹就可以找到自定义的编译系统。
配置完成后用 Sublime Text 打开想要编译执行的代码,首先按 Shift+Command/Ctrl+B
快捷键 (工具-用...编译
) 选择不同的编译系统,或者选择仅编译文件还是编译 + 执行,Sublime Text 会自动记住你的选择。下次对于同种文件,只需按 Command/Ctrl+B
快捷键 (工具-编译
) 就会重复这次的选择。
Visual Studio Code 配置
Visual Studio Code 作为微软公司的开源编辑器,不仅名字继承于微软的 IDE Visual Studio ,图标也和 Visual Studio 很相似。微软出品的产品质量都很有保障,但配置起来可能会让初学者一头雾水。
同样,主题、字体、文件图标等美化插件的配置我都不详细讲了,推荐一款 “Monokai GRS” 的主题配色,可以直接在 Visual Studio Code 内嵌的拓展应用商店里搜到。如果觉得英文 UI ( User Interface , 用户界面 ) 使用起来有困难,可以在拓展应用商店里下载微软官方汉化插件 “Chinese (Simplified) Language Pack for Visual Studio Code” 进行汉化。
简单谈谈 VS Code 的设置,微软最近的产品设置使用的都是 JSON 文件,按照 用户设置-工作区设置-文件夹设置 分级,越往后优先级越高,后一级会覆盖前一级的设置。更改设置后会在工作文件夹中生成一个 .vscode 隐藏文件夹,里面有一个 settings.json 文件,这就是你的文件夹设置文件。
Visual Studio Code 编译配置
在 VS Code 中编译运行程序,同样首先得配置好系统的编译器和 debug 工具,在上面关于 Sublime Text 的部分中已经说过,这里不再赘述。
配置好后用 VS Code 打开工作文件夹和代码,选择 终端-配置任务
,对于 C/C++ 可以直接选择 C/C++: g++ build active file
, VS Code 会在 .vscode 中自动生成一个 task.json 文件,我们几乎不用去更改它。
对于 Python 代码,则只能选择 使用模板创建task.json文件-Others
生成 task.json 文件,这样得到的基本配置文件为:
{
// See https://go.microsoft.com
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo Hello"
}
]
}
这就是一个输出 “Hello” 的 task , 我们大致修改一下
{
// See https://go.microsoft.com
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "pybuild",
"type": "shell",
"command": "/usr/python",
"args": [
"-u",
"${file}"
]
}
]
}
其中 “label” 标签大致就是任务名称,最重要的是在 “command” 里正确配置编译器路径,并且给 “args” ( arguments ) 标签里加上一些 -flag,根据需要自行确定 ( ${file}
代表当前程序的文件名 ) 。
这里简单谈谈 arg 这个变量名,我们经常在 C/C++ 里看到:
int main(int argc, char *argv[])
其中 argc 代表传入 main 函数的参数个数,即 argument count ; 而 argv 代表传入 main 函数的参数序列或指针,即 argument vector 。
保存配置后选择 终端-配置默认生成任务
,选择更名后的 task “label” , VS Code 会自动在 task.json 里添加一小段 “group” 设置分组的代码:
{
// See https://go.microsoft.com
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "pybuild",
"type": "shell",
"command": "/usr/python",
"args": [
"-u",
"${file}"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
这个操作其实就是将当前 task 分入 build 分组,使用 Shift+Command/Ctrl+B
快捷键会默认执行 build 分组中的 task 。
Visual Studio Code 调试配置
-
完成 task.json 配置后,选择
调试-打开配置
,对于 C/C++ 直接选择C++ (GDB/LLDB)
就会在 .vscode 文件夹里生成 launch.json 文件,我们几乎也不用去更改它。 -
对于 Python 代码, 这回也有
Python File
这个选项了,也可以自动生成 launch.json 文件。
编译后 ( 对于 python 这种解释型语言不需要编译 ) 我们按 F5
就可以进行 debug 了。 不需要使用插件,VS Code 就支持在每一行的行号前的空位处直接鼠标左键设置断点 ( breakpoint ) ,调试起来很方便。
Code Runner 插件
对于一些很简单的程序,如果不需要 debug 可以直接运行,我们只需要在拓展应用商店里下载 “Code Runner” 插件。下载完成后, VS Code 的界面右上方就会出现一个代表运行 ( Run ) 的三角形图标, 直接左键点击就可以执行了。
也可以在 settings.json 中进行自定义设置:
{
...,
// Set the executor of each language.
"code-runner.executorMap": {
"cpp": "cd $dir && g++ *.cpp -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"python": "python -u",
...
},
...
}
结语
到此 Sublime Text 和 Visual Studio Code 两款编辑器的编程环境配置差不多就已经完成了,更多高级的设置和功能需要在日常使用中慢慢学习探索。
按着这个过程一路配置下来应该也不会是一帆风顺的,边琢磨边实验可以加深对其的理解,希望各位都会有所收获。🎉 🎉 🎉

