一种方法是,在您的构建系统中,首先终止正在运行的节点进程,如果这不成功,则将当前文件传递给节点。所以你的 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 插件,不确定还有什么可以做的。