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

5
我希望能使用一个快捷键来运行和杀死node进程,并根据需要显示和隐藏构建窗口。
我按下ctrl + B
  1. 显示构建窗口
  2. 运行Node进程
我再次按下ctrl + B
  1. 杀死Node进程
  2. 关闭构建窗口。
我还需要发送终止信号,以便在退出之前读取它并执行一些操作。
目前我需要的第一部分已经完成,但是为了关闭node应用程序,我需要ctrl + shift + B,然后按esc键关闭构建窗口。
这是否可能,如果可能,如何实现?
编辑1(18.09.14)
我制作了一个Sublime Text插件,完全符合我上述描述。目前在ST3(Windows和Linux)上测试。唯一的问题是,在Windows平台上,您的node脚本将无法获得适当的终止信号(SIGINT或类似信号)进行预退出处理。我使用Sublime Text自己的控制台进行io处理-非常方便。如果人们对此感兴趣,我可能会很快发布插件。

你的构建系统使用哪种编程语言? - srquinn
3个回答

1
无论如何,我在Windows上这样修复它。
{
    "shell": true,
    "windows": {
        "cmd": "(TASKKILL /F /IM node.exe || 1)&& node \"$file\""
    }
}

1
一种方法是在您的构建系统中,首先杀死正在运行的 node 进程,如果不成功,则将当前文件传递给 node。因此,您的 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 包在转义引号中,否则如果路径中有空格,该命令将失败。此外,|| 在这里是至关重要的,因为如果没有进程可杀死,killall 将以状态 1(错误)退出,因此第一次它将运行 node,但第二次则不会运行。
请注意,由于我们在 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插件的情况下完成其他任何操作。

0

我用同样的方式实现了它,但没有检查除 .js 文件以外的任何文件。

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

这将关闭任何正在运行的节点并重新启动打开标签页的文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接