C/C++的开发环境有很多,但结合编辑器的操作性、通用性以及外观,Sublime是非常不错的选择,相比于VS,它体积小巧、运行速度快,相比于Dev-C++、Clang,它可定制性更强、功能更多,相比于Vim、Emacs,它配置起来更简单,而且跨平台,现在介绍如何用Sublime打造C/C++开发环境。
一个优秀的开发环境应该具备易于操作的编辑环境,全面的代码提示、检错功能,强大的调试功能,下面就从这几个方面介绍几款配置C/C++常用的插件,并说明几点注意事项。
用来在函数定义位置跳转,除了安装CTags插件还需要安装ctags程序,并添加系统环境路径。使用时先在程序所在文件夹下建立ctag标签,该目录下会生成.tags和.tags_sorted_by_files索引文件,然后在想要跳转的函数位置右键选择Nevigate to Definition
即可完成跳转,可以用快捷键配置如下。
{
"command": "navigate_to_definition",
"keys": ["f3"]
},
{
"command": "jump_back",
"keys": ["f2"]
},
Sublime版的GDB,相当于Linux下gdb -tui指令,带基本的图形界面,下载后需要在setting中配置如下代码:(其中interpreter=mi
指的是gdb的mechine interface指令,是供插件等软件调用的,而我们一般使用的gdb命令是commandline interface)
{
"workingdir":"${folder:${file}}",
"commandline":"g++ -g -std=c++11 ${file} -o ${file_base_name} && gdb --interpreter=mi --args ./${file_base_name}",
}
使用时在console中选择Start Debugging,快捷键F9可以设置断点,调试时F10相当于gdb的next,F11相当于gdb的step,以预览源码、变量,同时可供用户输入gdb命令,十分方便,但好像并不能显示输出比较蛋疼,实在需要看输出结果的直接在cmd中运行gdb吧。
Sublime自带了C代码的补全,但是对C++支持并不是很好,所以需要额外配置C++代码补全插件。
SublimeLinter
是代码检错的利器,SublimeLinter-clang
算是其中一个子集,使用这个插件还需要安装SublimeLinter
插件以及LLVM
环境并将clang.exe
的路径添加至系统环境变量。默认情况下警告和报错都是用outline,如果想更改样式可以在SublimeLinter Settings - User
中修改,下面附上笔者的配置:
// SublimeLinter Settings - User
{
"styles":
[
{
"priority": 1,
"mark_style": "squiggly_underline",
"scope": "region.yellowish markup.changed.sublime_linter markup.warning.sublime_linter",
"icon": "dot",
"types": [
"warning"
]
},
{
"priority": 1,
"mark_style": "outline",
"scope": "region.redish markup.deleted.sublime_linter markup.error.sublime_linter",
"icon": "dot",
"types": [
"error"
]
},
],
"lint_mode" : "background"
}
Sublime自身没有编译C的环境,因此需要用户自己建立一个。方法是选择Tools->Build System->New Build System
,输入以下代码(代码内容可以参考C++.sublime-package中的C++ Single File.sublime-build),然后为新建的编译环境取个名字如:C.sublime-build,新建的环境会放置在Packages->User
中,而Sublime自带的配置环境在其安装路径下的Packages
中,这一点要分清。需要编译C语言时,在Tools->Build System
中选择刚建立的环境即可。
{
"cmd": ["gcc", "${file}", "-std=c99", "-o", "${file_path}/${file_base_name}", "&", "start", "cmd", "/c", "${file_base_name} & echo. & pause"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c",
"shell": true,
"encoding":"cp936",
}
Sublime自身并不带与用户交互的接口,比如现在我写了一个需要用户输入数值的程序,这在Sublime中是无法完成的,你会发现在底端窗口输入了正确格式的数值回车后程序毫无反应。配置方法是修改原来的C++.sublime-package内容或者新建一个编译环境,下面分别进行介绍。
在Sublime安装路径下的Packages
文件中找到C++.sublime-package,将其改为.zip后缀后解压,将其中C++ Single File.sublime-build文件的内容改为以下内容后,还原成.sublime-package格式文件,这样选择Tools–>Build System–>C++ Single File后,就可以编译运行了,运行后会打开cmd供与用户交互。
{
"cmd":"g++ \"${file}\" -o \"${file_path}/${file_base_name}\"",
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"encoding":"cp936",
"selector": "source.c, source.c++",
"variants":
[
{
"name": "Run",
"cmd": "cmd /c start ; cmd /k ; \"${file_path}/${file_base_name}\""
}
]
}
有一点要注意,正常的windows下目录层次是反斜杠,但是${变量名}
的目录层次是斜杠,如${file_path}/${file_base_name}
。
选择Tools–>Build System–>New Build System,然后输入和a)完全一致的代码,保存后在Tools–>Build System中选择刚刚自己新建的环境,即可编译运行。
Sublime是跨系统的,但不代表其针对任何系统的配置文件都是相同的,在Linux下的配置文件复制到windows下就不一定可行,就比如"shell_cmd"
或"cmd"
命令,同样的内容在Linux下可以直接打开shell
与用户进行交互,但是windows下必须自行添加配置打开cmd
窗口才能实现交互功能,配置时要分清楚。毕竟Sublime是定制化非常强的软件,运行出错时莫急莫慌,细心排查,也不要一棵树吊死,条条大路通罗马,任何编辑器都不是万能的,要懂得扬长避短。
注:Sublime插件众多且多处于动态改进过程中,再结合个人喜好,C/C++环境配置方式有很多种,具体的插件配置方法还需仔细阅读源文档。