当前位置:编程学习 > JAVA >>

如何让sublime text 2运行程序时打开命令行窗口?

如何让sublime text 2运行程序时打开命令行窗口?就像Editplus那样,否则一些程序需要在运行时输入数据,在sublime text 2中一运行就提示输入有误。
我查了sublime text 2官网的说明,有这么一段:shell:Optional. If true, cmd will be run through the shell (cmd.exe, bash…).大意应该是在编译配置文件中加上“shell”:true就可以让程序在shell中运行,但是我试了,无论是windows还是linux(Xubuntu),java,c或者python都不行,只有C语言中有点反应,没有看到shell窗口,但是启用这一选项之后,sublime text 2的输出栏目中也看不到运行结果了。

是不是还有哪里没有设置到?坐等高手指点 --------------------编程问答-------------------- 同问啊,一直没有找到方法,要放弃这个编辑器了 --------------------编程问答-------------------- 不过这也只是个编辑器,大不了在命令行底下编译运行程序就是了 --------------------编程问答-------------------- 解决方法:使用批处理文件。本解决方法以C语言程序为例,编译器是gcc,我下载了MINGW直接解压到C盘根目录下,并设置了相应的PATH。其它编程语言可以按照这个思路适当修改批处理文件。
新建两个批处理文件,一个名为runp.bat,内容如下:
@echo off
%1
pause
exit

一个为callrunp.bat,内容如下:
@echo off
start runp.bat %1


然后在sunlime text 2中新建一个配置文件C.sublime-build,内容如下:
{
"cmd": ["gcc", "${file}", "-o", "${file_path}/${file_base_name}.exe"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c",


"variants":
[
{
"name": "Run",
"cmd": ["callrunp.bat", "${file_base_name}.exe"],
"working_dir": "${file_path}"
}
]
}

上半部分是从sublime text 2的C++编译配置文件中抄来的,只是把编译器改成了gcc,可编译的文件名改成了source.c。后半部分就是关键,使用callrunp.bat执行生成的可执行文件,可以打开一个命令行窗口,就可以输入数据了。 --------------------编程问答-------------------- 需要将两个bat文件放在系统能找到的地方么?我试了试..不行啊.. --------------------编程问答-------------------- 这个要破解的吧? --------------------编程问答--------------------
引用 5 楼 huxiweng 的回复:
这个要破解的吧?

可以不破解,不过保存10次后,每次保存有提醒。 --------------------编程问答-------------------- 3楼写批处理的办法太复杂了。
只要在Sublime Text 2\Data\Packages\User文件夹里,复制一份ST自带的C++.sublime-build,并修改为:
{
"cmd": ["D:\\Program Files\\MinGW\\bin\\gcc", "${file}", "-o", "${file_path}/${file_base_name}"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c, source.c++",

"variants":
[
{
"name": "Run",
"shell": true,
"cmd": ["start", "${file_path}/${file_base_name}"]
}
]
}
--------------------编程问答-------------------- 俺用的也是GCC编译器。想试试TinyCC呢。 --------------------编程问答-------------------- 关键是最后两行:
"shell": true,
"cmd": ["start", "${file_path}/${file_base_name}"]
--------------------编程问答--------------------
引用 9 楼 mac007cn 的回复:
关键是最后两行:
"shell": true,
"cmd": ["start", "${file_path}/${file_base_name}"]

请教楼上,如果是在Linux下面用ST,这个方法可以吗?如果不行,该怎么做? --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 7 楼 mac007cn 的回复:
3楼写批处理的办法太复杂了。
只要在Sublime Text 2\Data\Packages\User文件夹里,复制一份ST自带的C++.sublime-build,并修改为:
{
"cmd": ["D:\\Program Files\\MinGW\\bin\\gcc", "${file}", "-o", "${file_path}/${file_base_name}"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c, source.c++",

"variants":
[
{
"name": "Run",
"shell": true,
"cmd": ["start", "${file_path}/${file_base_name}"]
}
]
}


这个方法我试了,可以出现命令行窗口,但是显示结果的时候是一闪而过 --------------------编程问答-------------------- 这是我在用的最新版的:
{
    "cmd": ["D:\\Program Files\\tcc\\tcc.exe", "${file}"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c",

    "variants":
    [
        {
            "name": "Run",
            "shell": true,
            "cmd": ["start", "cmd", "/c", "${file_base_name} & echo. & pause"]
        }
    ]
} --------------------编程问答-------------------- #13的配置在win7下能正确运行。并且只要你的sublime安装了convert to utf8插件,就可以很好的支持中文GBK编码,即使在cmd下输入数据也可以。至于linux下,可能需要另外的命令行解释器,比如bush,我没弄过。 --------------------编程问答--------------------
引用 13 楼 mac007cn 的回复:
这是我在用的最新版的:
{
    "cmd": ["D:\\Program Files\\tcc\\tcc.exe", "${file}"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c",

    "variants":
    [
        {
            "name": "Run",
            "shell": true,
            "cmd": ["start", "cmd", "/c", "${file_base_name} & echo. & pause"]
        }
    ]
}

还是一闪而过,而且最后的那个“按任意键退出”的提示会显示在ST里面,不过可以试试把/c改成/q --------------------编程问答-------------------- 看错了,你的是对的,不过我试了一下,没有echo.也一样可以暂停,非常感谢 --------------------编程问答-------------------- echo.就是增加一个空行而已。
关于GBK编码的一个小问题:convertToUTF8插件有点小毛病。写完程序,当第一次按下ctrl+b编译(源文件是自动保存的),再按下crtl+shift+b运行程序,如果程序输出里有中文,则cmd中会出现乱码。然后再按下crtl+b第二次编译,再运行则不会出现乱码,中文能正确显示。正心烦呢,我考虑是convertToUTF8插件的问题。 --------------------编程问答--------------------
引用 16 楼 jzq526 的回复:
看错了,你的是对的,不过我试了一下,没有echo.也一样可以暂停,非常感谢


他的这个只有在脚本运行无错误的时候,也就是没有异常出来,就可以pause住,但是脚本出错了,cmd窗口还是会一闪而过,如果改成 "cmd": ["start", "cmd", "/c", "${file_base_name} || echo. && pause"],就可查看错误,但是运行正常又会一闪而过。有什么方法可以两者兼得?LZ的简单bat其实可以的····· --------------------编程问答--------------------
也可以改为"cmd": ["start","cmd", "/k", "${file_base_name} || echo. && pause && exit"] --------------------编程问答--------------------
汗! 今天才知道在windows的批处理里面 & 与 &&是不一样的,我sb了····· --------------------编程问答--------------------
引用 17 楼 mac007cn 的回复:
echo.就是增加一个空行而已。
关于GBK编码的一个小问题:convertToUTF8插件有点小毛病。写完程序,当第一次按下ctrl+b编译(源文件是自动保存的),再按下crtl+shift+b运行程序,如果程序输出里有中文,则cmd中会出现乱码。然后再按下crtl+b第二次编译,再运行则不会出现乱码,中文能正确显示。正心烦呢,我考虑是convertToUTF8插件的问题。

没有必要用插件,我也遇到过GBK乱码的问题,其实可以增加一个encoding参数,这是我用来编译和运行java程序的配置,可以参考一下
{
"cmd": ["javac","-encoding","UTF-8","-d",".","$file"],
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"selector": "source.java",
"encoding":"GBK",

"variants":
    [
        {
            "name": "Run",
            "shell": true,
            "cmd" :  ["start","cmd","/c", "java ${file_base_name}&pause"],
            "working_dir": "${file_path}",
            "encoding":"GBK"
        }
    ]
}
--------------------编程问答--------------------
引用 20 楼 fbwfbi 的回复:
汗! 今天才知道在windows的批处理里面 & 与 &&是不一样的,我sb了·····

你不说我还真没注意到它们的区别,我也SB了呵呵 --------------------编程问答-------------------- you shenmeyong 
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,