在Sublime Text 2上切换节点构建窗口

Tau*_*i28 5 javascript node.js sublimetext2

我希望能够使用一个快捷方式来运行和终止节点进程,包括根据需要显示和隐藏构建窗口.

我按ctrl + B:

  1. 显示构建窗口
  2. 运行节点进程

ctrl + B再次按下:

  1. 杀死节点进程
  2. 关闭构建窗口.

我还需要发送kill信号,以便我可以在节点应用程序中读取它并在退出之前执行几个操作.

目前我需要的第一部分是工作,但关闭我需要的节点应用程序ctrl + shift + B,然后点击esc关闭构建窗口.

这是可能的,如果可能,怎么样?

编辑1(18.09.14)

做了一个崇高的文本插件,完全按照我上面描述的那样做.目前在ST3(Windows和Linux)上进行了测试.目前唯一的问题是在Windows平台上,您的节点脚本不会获得适当的终止程序杀死信号(SIGINT或类似的东西).我使用sublime文本自己的控制台进行io程序 - 非常方便.如果人们对此感兴趣,可能很快就会发布插件.

phe*_*e23 1

一种方法是在构建系统中,首先终止正在运行的节点进程,如果不成功,则将当前文件传递给节点。所以你的node.sublime-build可能看起来像这样:

{
    "cmd": [ "killall node || node \"$file\"" ],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.js",
    "shell": true
}
Run Code Online (Sandbox Code Playgroud)

Sublime 只允许一个命令传递多个参数,所以类似的东西"cmd": [ "killall node ||", "node", "$file"]不起作用,尽管我认为它以前在 Sublime 2 中起作用。因此需要用$file转义引号括起来,因为否则如果路径$file有一个命令,命令将失败其中的空间。另外,||这里很关键,因为killall如果没有要终止的进程,则以状态 1(错误)退出,因此第一次它将运行节点,但第二次不会。

请注意,由于我们在此处的 shell 中工作,因此这是特定于平台的。我不知道如何||在 Windows 上执行相同的操作,但您只需要这样的操作:

{
    "cmd": [ "killall node || node \"$file\"" ],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.js",
    "shell": true
    "windows": {
        "cmd": [ "insert whatever works here..." ]
    }
}
Run Code Online (Sandbox Code Playgroud)

一个很大的限制是这会杀死所有正在运行的节点进程;如果你想让某些东西在后台运行,那会很烦人。如果有人知道如何在单个命令中定位特定节点进程,请添加到我的答案中。

其次,您可以将 cmd 包装在 bash 脚本中,这样可以更轻松地执行多项操作,例如终止特定进程。那么 cmd 数组将是[ "bash", "name-of-script.sh" ]. 使用lsof它可以很容易地获取正在运行当前文件的特定节点进程。您还可以使用bash -cas 命令,然后将整个脚本粘贴到 cmd 数组的第二个元素中。

希望有帮助。我缺少您的一项要求:ESC仍然需要关闭构建窗口。不知道如果不编写 Sublime 插件还能做什么。