木匣子

Web/Game/Programming/Life etc.

在 Sublime Text 运行交互程序

Submile Text 是一个很漂亮的文本编辑工具,配上丰富的扩展,可谓神器。

我很喜欢在 Submile Text 里写一些小脚本,包括 javascript, python, processing 等等,甚至可以直接编译运行。但是有一个困惑就是如何在 Submile Text 的控制台里获得输入?例如有这样一个 Hello.py

your_name = raw_input("What's your name?")
print "Hello, ", your_name

如果直接在 Submile Text 执行 Tools > Build 的话,它会遗憾地告诉你

What's your name?Traceback (most recent call last):
  File "/Users/mutoo/code/python/h.py", line 1, in 
    your_name = raw_input("What's your name?")
EOFError: EOF when reading a line
[Finished in 0.1s with exit code 1]

实际上 Submile Text 的 Build System 很简陋,它只是调用 Shell 执行一些命令,然后将返回结果输出到它的控制台。对于 Python 的 Build System 是这样的:

{
    "cmd": ["python", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python"
}

Submile Text 并不处理输入过程,所以 Build 的时候上面的 Hello.py 报出了 EOFError: EOF when reading a line 错误,提示没有读到任何东西就 EOF 了。

SubmileREPL

不过这等小事可难不倒 Submile Text ,它的强大在于有无数开发者为它开发强大的插件。那么是否有这样一个插件可以应对以上的问题?万能的 StackOverflow 给出了答案: SubmileREPL

SublimeREPL is a plugin for Sublime Text 2 that lets you run interactive interpreters of several languages within a normal editor tab. It also allows connecting to a running remote interpreter (e.g. Clojure/Lein) though a telnet port.

学过脚本语言的话,常常可以看到 REPL(Read-Eval-Print Loop)也就是“读取-求值-输出”循环。SumbileREPL 插件提供了一个简单的交互环境,可以让你的脚本直接“跑“到交互模式的解析器上,这样就可以直接在解析器里进行输入输出了。

SublimeREPL 可以通过 Pacakge Control 直接安装,使用起来也很容易,它的官方网站上有简易的教程。

使用过程大致只需要注意以下几点:

  • 安装完插件后需要重启一下 Sublime Text ;
  • 开启分栏 View > Layout > Rows: 2 (Optoin + Shift + Command + 2);
  • 在其中一个分栏设置语法环境:Tools > Command Palette, SublimeREPL: Python 或其它语言;
  • 在另一个分栏里写自己的脚本,然后使用 Tools > SubmileREPL > Transfer to REPL > File 将脚本运行到解析器中。

最后一个操作会经常使用,可以使用连续快捷键 Ctrl + , 然后 f 执行。