5

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

我按ctrl + B

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

ctrl + B再次按下:

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

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

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

这是可能的,如果是的话,怎么做?

编辑 1 (18.09.14)

制作了一个 sublime text 插件,它完全符合我上面描述的功能。目前在 ST3(Windows 和 Linux)上测试。当前唯一的问题是,在 Windows 平台上,您的节点脚本不会为退出前程序获得适当的终止信号(SIGINT 或类似的东西)。我使用 sublime texts 自己的控制台进行 io 程序 - 非常方便。如果人们对它感兴趣,可能会很快发布插件。

4

3 回答 3

1

无论如何,我在这样的窗口中修复它,愚蠢的?管他呢

{
    "shell": true,
    "windows": {
        "cmd": "(TASKKILL /F /IM node.exe || 1)&& node \"$file\""
    }
}
于 2014-09-17T06:45:47.290 回答
1

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

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

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..." ]
    }
}

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

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

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

于 2013-12-28T00:49:32.370 回答
0

我以相同的方式进行操作,但不检查 .js 文件以外的任何文件

{
    "cmd": [ "killall node || node \"$file\"" ],
    "selector": "*.js",
    "shell": true
    "windows": {
        "cmd": "(TASKKILL /F /IM node.exe || 1)&& node \"$file\""
    }
}

这将杀死任何正在运行的节点并重新启动选项卡打开的文件

于 2014-11-13T00:50:19.263 回答