Re:从零开始教你使用 Sublime Text( 三 )


2.编译运行 C++ 程序首先 Sublime 自身可以直接编译运行程序 , 方法是按快捷键 Ctrl+B 或者点击菜单栏 Tools->Build 。另外 , 也可以在 Tools->Build System 选择编译系统 。还可以按快捷键 Ctrl+Shift+B 或者点菜单栏 Tools->Build With 选择用什么编译 。运行结束后会在控制台中显示结果和运行时间 。

Re:从零开始教你使用 Sublime Text

文章插图

Re:从零开始教你使用 Sublime Text

文章插图
但是自带的编译有一个问题 , 就是无法输入 。如果你写一个 A+B,你会发现无法在下方的控制台中输入任何字符 。
解决方法有两种,一种是自己新建一个编译系统,一种是安装 CppFastOlympicCoding 插件 。第二种方法可以查看 3-6.CppFastOlympicCoding 。这里提一下第一种方法 。
首先点击菜单栏 Tools->Build System->New Build System,然后在打开的界面中就可以自己写一个编译系统 。具体的格式为:
{    "命令行类型": "命令",    "file_regex": "一个正则表达式,用于显示编译错误信息",    "working_dir": "执行命令的目录",    "selector": "适用范围",    "encoding": "编码",    "variants"://其他变体    [        {            "name": "名称",            "命令行类型": "命令"        },        //...    ]}其中 variants 并不是必要的 。
具体如何使用?举个例子,这是我在 windows 下使用的编译系统:
{    "cmd": ["cmd","/c","g++","-Wall","-std=c++14","-O2","${file}","-o","${file_path}/${file_base_name}","&&","start","cmd","/c","${file_path}/${file_base_name} & echo.&pause"],    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",    "working_dir": "${file_path}",    "selector": "source.c,source.c++",    "encoding": "cp936"}windows 下的命令行为 cmd,所以第一行为 "cmd":  , 后面的命令可以是一个字符串,也可以是字符数组 。其中 ${file} 为当前文件的地址,${file_path} 为目录 , ${file_base_name} 为文件去掉后缀的名称 。举例来说,如果我的编译对象是 C:\Users\[数据删除]\Desktop\a.cpp,那么 ${file} 对应的就是 'C:\Users\[数据删除]\Desktop\a.cpp' , ${file_path} 就是 C:\Users\[数据删除]\Desktop,${file_base_name} 就是 a 。所以例子第一行的意义就是用 g++编译当前文件并在 cmd 中运行可执行文件,并在运行结束后执行 echo.$pause 命令 。其效果相当于 DevC++ 中的编译运行 。需要注意这里不能写成 "cmd /c g++ -Wall -std=c++14 -O2 ${file} -o ${file_path}/${file_base_name} && start cmd /c ${file_path}/${file_base_name} & echo.&pause" , 因为会出现两个 & 之间的优先级错误 。
例子的第二行用于显示编译错误,效果如下:
Re:从零开始教你使用 Sublime Text

文章插图
主要效果是显示中间的红框,如果去掉这句话则只会在控制台中显示错误信息 。
关于为什么正则表达式是 ^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$?其实是用来匹配错误信息的 。
前面两个 .. 匹配了 C: , 然后 [^:]* 往后一直匹配到第一个冒号前,所以在上图中 (..[^:]*) 匹配了 D:\0-mine\az.cpp 。然后 :([0-9]+):?([0-9]+)?:? 匹配了行号和列号,即图中的 :12:28:,之后一个空格一直匹配到末尾,即为具体的错误信息 error: expected ';' before 'printf' 。
第三行 working_dir 表示要执行命令的位置,"working_dir": "${file_path}" 相当于在当前文件目录中执行该命令 。
第四行 selector 表示这个编译系统的适用范围,格式为 source.后缀,如我要给 C++ 程序使用则为 source.c++ 。当没有填写时则默认范围为所有文件 。

推荐阅读