R·ex / Zeng


音游狗、安全狗、攻城狮、业余设计师、段子手、苦学日语的少年。 MUGer, hacker, developer, amateur UI designer, punster, Japanese learner.

解决Sublime-Text运行程序时用户无法输入的问题

注意:本文发布于 2695 天前,文章中的一些内容可能已经过时。

搬运一下吧,之前的博客园准备废掉了。

ST是个什么东西就不废话了。

它支持按照文件类型自动选择编译器(Tools→Build System)(当然,前提是你装了这个编译器)(一般来说,Automatic就足够了)。

也可以在内嵌的终端中运行你的程序(Tools→Run),不过有个问题,它内嵌的终端不支持用户输入,也就是说,含有scanf、input、nextInt之类的语句写了就是白写。

【好吧ST你赢了。】

【大不了我不用你的终端就是了。】

于是目标就是修改Run的代码,使得在运行的时候使用弹出的cmd窗口。找了一下,Run命令是在%Appdata%\Sublime Text 2\Packages文件夹中…………的某些子文件夹里面的后缀名为sublime-build的文件中提到了的,例如“C++.sublime-build”,里面有一段variants,其中cmd就是运行命令。

于是我尝试用start来打开新窗口,程序是能执行了,但是执行完之后接着关了,除非你打上system("pause")…………反正我是不喜欢。

继续尝试,发现start后面的东西都会被当作程序来执行,于是直接在后面加“& pause”是不现实了,但是还好我还记得一点批处理。

于是解决方法如下!

写一个批处理:

@ECHO OFF
call %1 %2 & pause & exit

保存文件名随意,例如“st_run_script.bat”,保存位置随意,例如“D:\Sublime Text 2”(我的ST安装目录),内容大概就是在当前窗口运行一个命令:“参数1 参数2”,很显然,参数1可以用做程序名,参数2可以用做程序参数。那么我们把variants里面的cmd命令改一改:

"cmd": ["start", "D:\\Sublim~1\\st_run_script.bat", "${file_path}\\\\${file_base_name}"]

上文的D:\\Sublim~1\\st_run_script.bat是我的bat文件存放位置。

如果没用的话,应该是有一行"shell": true,把那行删了就好。

差不多能看懂吧?

ruby.sublime-build内容类似:

"cmd": ["start", "D:\\Sublim~1\\st_run_script.bat", "ruby", "${file}"]

把用到的语言都改一改,于是大功告成!

Update 2014-02-10

Ubuntu的解决方案如下:

首先你要有个bash,其次你要有个gnome-terminal。

写一个shell脚本,不妨存为st_run_script.sh,保存位置嘛,在ST安装目录里就是了:

#!/bin/bash
$1
echo 'Press anykey to continue...'
SAVEDSTTY=`stty -g`
stty -echo
stty raw
dd if=/dev/tty bs=1 count=1 2> /dev/null
stty -raw
stty echo
stty $SAVEDSTTY

然后就是安装目录下Pristine Packages文件夹里的C++.sublime-package文件了,用压缩软件打开,找到C++.sublime-build文件,里面有一行改掉:

"cmd": ["gnome-terminal", "-x", "/home/rex/Download/Sublime_Text_2/st_run_script.sh", "${file_path}/${file_base_name}"]

当然,上面的/home/rex/Download/Sublime_Text_2/st_run_script.sh是我的sh文件的路径。

如果没用的话,应该是有一行"shell": true,把那行删了就好。

Ruby.sublime-package里面的Ruby.sublime-build文件也可以如法炮制:

"cmd": ["gnome-terminal", "-x", "/home/rex/Download/Sublime_Text_2/st_run_script.sh", "ruby ${file}"]

于是。。。。世界清静了!

版权声明:除文章开头有特殊声明的情况外,所有文章均可在遵从 CC BY 4.0 协议的情况下转载。
上一篇: NULL
下一篇: Hello World!

这是我们共同度过的

第 2041 天