我希望能够使用一个快捷方式来运行和终止节点进程,包括根据需要显示和隐藏构建窗口。
我按ctrl + B
:
我再次按ctrl + B
:
我还需要发送kill信号,以便我可以在节点应用程序中读取它并在退出之前执行几个操作。
目前我需要的第一部分是工作,但要关闭节点应用我需要ctrl + shift + B
,然后点击esc关闭构建窗口。
这是可能的,如果可能,怎么样?
制作了一个完美的文本插件,完全按照我的描述进行操作。目前在ST3(Windows和Linux)上进行了测试。目前唯一的问题是在Windows平台上,您的节点脚本不会获得适当的终止程序杀死信号(SIGINT或类似的东西)。我使用sublime文本自己的控制台进行io程序 - 非常方便。如果人们对此感兴趣,可能很快就会发布插件。
答案 0 :(得分: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插件,还不确定还能做些什么。
答案 1 :(得分:1)
无论如何,我在那样的窗户中修复它,愚蠢的?谁在乎
{
"shell": true,
"windows": {
"cmd": "(TASKKILL /F /IM node.exe || 1)&& node \"$file\""
}
}
答案 2 :(得分:0)
我以同样的方式做了,但没有检查.js文件以外的任何文件
{
"cmd": [ "killall node || node \"$file\"" ],
"selector": "*.js",
"shell": true
"windows": {
"cmd": "(TASKKILL /F /IM node.exe || 1)&& node \"$file\""
}
}
这将终止所有正在运行的节点并重新启动其选项卡已打开的文件