以前一直使用notepad++作为首选编辑器,不过看到最近很流行sublime text这个东西,试用了一下,他的语法高亮和Snippets都很不错,以及牛逼的goto anything...
不过在notepad++里面有个自带的插件NPP Exec,可以自己配置自定义的指令,来实现一些功能,比如我直接配置了gcc的编译命令,那么就可以不离开编辑器直接编译当前正在编写的代码,这个功能对于写个小程序和脚本之类的都很方便。
不过在sublime里面确没找到对应的插件,在它的Tools->build system
下面有一些内置的配置,不过没有我需要的gcc的配置文件,于是从网上找文档,尝试自己写一个
网上找了半天,只找到一个相关的文档 http://docs.sublimetext.info/en/latest/reference/build_systems.html
不过这个也讲得很简略,简单来说,就是需要自己添加一个新的build命令,选择Build->Build System->New Build System... 来添加一个新的build功能。
sublime现阶段所有的配置都是通过文件来实现的,而没有对应界面,所以。。。看文档写配置文件吧。。
按照文档的说法,sublime的build配置是一个JSon格式的文件,使用.sublime-build作为后缀
首先把最终的配置文件贴一下,然后再详细解释
1 { 2 "cmd": ["build_gcc","$file"], 3 "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", 4 "selector": "source.c" 5 }
上面第2行是必须要有的一行,表示用于执行的命令,一般第一个表示执行的命令,之后的每个参数使用引号括起来作为单独的一项(注意没有空格),其中的$file表示当前激活的文件的全路径和文件全名
剩下两行都是可选的,第3行的作用是捕获上面命令的输出,后面是需要捕获的内容,使用Perl格式的正则表达式,如果没有这一句的话,编辑器会执行命令,但是什么都不会输出
第4行 是选择器,意思是当让编辑器自动选择编译方案时候,这个对应于什么类型的文件
至于cmd里面的build_gcc,是因为我想在编译成功之后,运行一下这个文件,于是写了一个build_gcc.bat的批处理,放到path路径里面,批处理是这样写的
1 del /F /Q temp4gcc.exe 2 gcc -std=c99 -o temp4gcc.exe %1 3 temp4gcc.exe
不过在sublime运行之后,提示错误,看起来这个cmd是不可以使用批处理了,所以又用C简单写了一个程序,内容基本上和批处理相同
1 #include <stdio.h> 2 #include <string.h> 3 4 int main(int argc, char const *argv[]) 5 { 6 if (argc != 2){ 7 printf("Usage:build_gcc filename\n"); 8 return 0; 9 } 10 char exec[200] = "gcc -std=c99 -o E:\\work\\temp4gcc.exe "; 11 strcat(exec,argv[1]); 12 system("del /F /Q E:\\work\\temp4gcc.exe"); 13 system(exec); 14 system("E:\\work\\temp4gcc.exe"); 15 return 0; 16 }
不过这个写的还是不严谨,功能也不强,不过管他呢,对我来说,功能够用就好
把这个小程序编译为build_gcc.exe,放到path里面,现在在在sublime选择刚才的新加的命令,然后运行 Tools->Build 或者 Ctrl+B
ok,程序结果出来了,不过貌似有些多余的东西。。。。
sublime在捕获输出的时候,如果发现输出内容编码不爽,会直接报一个错。。。
因为这个构建功能实际上是由一个exec.py来实现的
,所以简单修改一下这个文件来去掉这个讨厌的输出
首先把安装目录下的Data\Packages\Default\exec.py复制到Data\Packages\User下面
然后在文件中搜索 Decode error - output not 这句,然后整行删掉,然后使用python -O -m py_compile exec.py来重新编译一下,
再在sublime编译一下那个C的小程序。ok
不过这个还是有点小缺点的,就是现在还不支持输入内容,也就是说没法交互,不过我只是把它定义在“运行小程序”上,这个也不是什么大问题,如果需要交互调试之类的有更强大的IDE可以选用