【问题标题】:Toggle Node Build Window on Sublime Text 2在 Sublime Text 2 上切换节点构建窗口
【发布时间】:2013-10-30 09:20:30
【问题描述】:

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

我按ctrl + B:

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

我再次按ctrl + B

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

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

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

这可能吗?如果可以,怎么做?

编辑 1 (18.09.14)

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

【问题讨论】:

  • 您的构建系统使用什么语言?

标签: javascript node.js sublimetext2


【解决方案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(错误)退出,所以第一次它会运行 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 插件,不知道那里还能做什么。

【讨论】:

    【解决方案2】:

    不管怎样,我在 Windows 中修复它,笨蛋?谁在乎

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

    【讨论】:

      【解决方案3】:

      我也是这样做的,但不检查 .js 文件以外的任何文件

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多