Sublime

我的Sublime的一些配置

环境:Win10 Sublime 4

命令一键文件重定向输入输出

优化日志:
1.能够将输入输出重定向到文件
2.自动关闭output时出现的cmd窗口
3.一个命令编译并运行
4.添加快捷键一键编译运行

输入输出重定向到文件

简介:设置命令,一键让程序从std.in读入,输出到std.out。

背景:由于Acmer总是需要样例的输入与输出,如果样例输入很多,输出与样例混杂在一起,会比较难看。
这个时候就需要将输入输出重定向到文件

转载,觉得谢大写得好的可以投个币

自动关闭output时出现的cmd窗口

由于每次output输出到文件时,都会出现cmd这个黑框框,需要手动删掉,十分麻烦,下面代码就是自动关掉这个cmd黑框框,不过还是会闪一下。
把run.bat改为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off

if "%time:~0,2%" lss "10" (SET HOUR=%time:~1,1%) else (SET HOUR=%time:~0,2%)
if "%time:~3,2%" lss "10" (SET MINUTE=%time:~4,1%) else (SET MINUTE=%time:~3,2%)
if "%time:~6,2%" lss "10" (SET SECOND=%time:~7,1%) else (SET SECOND=%time:~6,2%)
if "%time:~9,2%" lss "10" (SET MILLISECIOND=%time:~10,1%) else (SET MILLISECIOND=%time:~9,2%)
set /a START=%HOUR%*3600*100+%MINUTE%*60*100+%SECOND%*100+%MILLISECIOND%
%1 <%2 >%3
if "%time:~0,2%" lss "10" (SET HOUR=%time:~1,1%) else (SET HOUR=%time:~0,2%)
if "%time:~3,2%" lss "10" (SET MINUTE=%time:~4,1%) else (SET MINUTE=%time:~3,2%)
if "%time:~6,2%" lss "10" (SET SECOND=%time:~7,1%) else (SET SECOND=%time:~6,2%)
if "%time:~9,2%" lss "10" (SET MILLISECIOND=%time:~10,1%) else (SET MILLISECIOND=%time:~9,2%)
set /a END=%HOUR%*3600*100+%MINUTE%*60*100+%SECOND%*100+%MILLISECIOND%
set /a TOTAL=(%END%-%START%)*10
echo.
echo Run time : %TOTAL% ms

if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM

如果不需要runtime这个信息,run.bat改为如下即可

1
2
3
4
5
6
@echo off
%1 <%2 >%3
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM

一个命令编译并运行

由于每次需要先点g++编译再点run或output运行,十分麻烦,那么可不可以一个命令让编译并运行呢?答案是肯定的,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"working_dir": "${file_path}",
"cmd": ["g++", "${file}", "-o", "${file_base_name}.exe", "-lm", "-Wall", "-O2","-std=gnu++11","-Wl,--stack,100000000"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"selector": "source.c",
"shell": true,
"variants":
[
{
"name": "Run",
"shell_cmd": "g++ -Wall -std=c++11 \"$file\" -o \"$file_base_name\" && start cmd /c \"${file_path}/${file_base_name} & pause\""
},
{
"name": "Output",
"cmd": ["g++", "-Wall","${file}", "-o", "${file_path}/${file_base_name}", "&&", "start","/D ${file_path}","run.bat","${file_base_name}.exe","std.in","std.out"]
},
]
}

快捷键一键编译运行

我不想每次ctrl+shift+b来选择命令运行,太麻烦了,那么能不能设置个快捷键呢?答案是肯定的,方法如下:
在sumlime点击preferences->key bindings
然后在里面加上以下代码即可:

1
2
3
4
5
[
{"keys": ["f9"], "command": "build", "args": {"variant": "Run"}},
{"keys": ["f10"], "command": "build", "args": {"variant": "Output"}}
]

最终配置

g++.sublime-build:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"working_dir": "${file_path}",
"cmd": ["g++", "${file}", "-o", "${file_base_name}.exe", "-lm", "-Wall", "-O2","-std=gnu++11","-Wl,--stack,100000000"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"selector": "source.c",
"shell": true,
"variants":
[
{
"name": "Run",
"shell_cmd": "g++ -Wall -std=c++11 \"$file\" -o \"$file_base_name\" && start cmd /c \"${file_path}/${file_base_name} & pause\""
},
{
"name": "Output",
"cmd": ["g++", "-Wall","${file}", "-o", "${file_path}/${file_base_name}", "&&", "start","/D ${file_path}","run.bat","${file_base_name}.exe","std.in","std.out"]
},
]
}

run.bat:

1
2
3
4
5
6
@echo off
%1 <%2 >%3
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM

快捷键:

1
2
3
4
5
[
{"keys": ["f9"], "command": "build", "args": {"variant": "Run"}},
{"keys": ["f10"], "command": "build", "args": {"variant": "Output"}}
]

至此,大功告成!!!快快来享受代码的乐趣吧!
(终于把编辑器配成了自己理想的样子)

文件头部注释

简介:在文件头部自动写上一啪啦的模板代码

背景:由于Acmer在每个cpp文件都要写上头文件,宏定义等一系列模板,这个时候就需要一个插件FileHeader了

安装什么的就不多说了,网上都有,这里重点讲下配置

1.修改author等信息
设置–>首选项–>插件设置–>File Header–>settings-User(这里一定是user,别选默认)
添加以下内容

1
2
3
4
5
6
7
{
"Default": {
"author":"Ding Jianlong",
"last_modified_by":"Ding Jianlong",
"email":"123@51015.cn"
}
}

2.文件自动添加头文件,宏定义等文件头部注释
在”C:\Users\BohongLi\AppData\Roaming\Sublime Text\Packages\FileHeader\template\header”下找到对应语言的tmpl(C++是C++.tmpl)(AppData得显示隐藏文件才能看到)
比如我这里是C++.tmpl,我就在文件末尾加上我的板子即可,注意板子中不要有注释符号”//“,不然可能显示不出来。

好像template\body里也有个对应的C++.tmpl,这个应该用来贴文件头部那一啪啦好像更合适,不过下次再弄吧,12点半了,困了,困了