【问题标题】:Creating custom build system for MATLAB through Sublime Text 2通过 Sublime Text 2 为 MATLAB 创建自定义构建系统
【发布时间】:2012-08-05 20:41:36
【问题描述】:

我已经在 Sublime Text 2 中编辑我的 .m 文件(在我的问题的其余部分以下称为 Sublime),并且最近已经习惯使用 Sublime 中的构建函数来运行 Python 代码,我试图为 MATLAB 文件设置类似的东西。我正在尝试这样做,因为我厌倦了在单独的窗口中运行我的代码和编辑我的代码。

按照文档,我尝试使用下面这个看起来非常合理的代码,其中“-r”标志启动 MATLAB 来运行我的文件,“-nodesktop”标志启动 MATLAB 而没有庞大的 Java GUI,以及“- nosplash" 标志启动 MATLAB 而没有不必要的启动屏幕。选择器允许 Sublime 自动在 m 个文件上使用此构建系统,并且 path 变量设置将启动 MATLAB 的目录的路径(通过运行“which matlab”找到的目录)。

我知道我可以在 MATLAB GUI 中设置首选文本编辑器,但我对此不感兴趣。除了文本编辑器之外,我还有兴趣将 Sublime 用作构建系统。

{
    "cmd": ["matlab", "-r", "-nodesktop", "-nosplash", "$file_name"],
    "selector": "source.m",
    "path": "/usr/local/MATLAB/R2012a/bin"    
}

在我的无错误 .m 文件上运行构建时,我在下面发现了这个错误,这没有意义。我认为这没有意义,因为已经使用标准命令行选项启动了 MATLAB,并且也收到了 MATLAB 内部错误。

/usr/local/MATLAB/R2012a/bin/matlab: 1: /usr/local/MATLAB/R2012a/bin/matlab: awk: not found
/usr/local/MATLAB/R2012a/bin/matlab: 1: /usr/local/MATLAB/R2012a/bin/matlab: expr: not found

Internal error 2: Could not determine the path of the
              MATLAB root directory.

                  original command path = /usr/local/MATLAB/R2012a/bin/matlab
                  current  command path = /usr/local/MATLAB/R2012a/bin/matlab

                  Please contact:

                      MathWorks Technical Support

                  for further assistance.

[Finished in 0.1s with exit code 1]

是否有其他人在通过备用构建系统调用 MATLAB 脚本时遇到过类似的问题?如果该信息有用,我还没有尝试在除 Ubuntu 12.04 之外的任何其他操作系统上为 Sublime 中的 MATLAB 设置构建系统。

现在可以使用了! 这是我的Matlab.sublime-build

{
    "cmd": ["/usr/local/MATLAB/R2012a/bin/matlab", "-nosplash", "<$file_name"],
    "selector": "source.m"
}

更新:我现在在我的 Github 页面上托管了适用于 Linux 和 Mac 的 Sublime Text 2 R2012a 构建文件作为示例: https://github.com/jessebikman/Sublime-Text-2-build-Matlab-code

【问题讨论】:

  • 也许你可以看看其他人是如何用 Vim 做的:Vim and matlab GUI - Emulate matlab Run (<F5>) with VimRun matlab script。如果您使用的是Windows,我建议您使用 COM 接口与 MATLAB 进行交互
  • 这是一个很好的问题!您是否希望完全脱离 Matlab IDE?或者沿着这些路线做更多的事情会起作用吗? blogs.mathworks.com/community/2009/09/14/…
  • 我想完全脱离 Matlab IDE。一方面,Sublime 在眼睛上更容易。
  • 您应该将选择器值更改为“source.matlab” - 这样当您按下 ctrl+b 时 sublime 将使用 matlab,当您打开“工具/构建系统/自动”时

标签: matlab sublimetext2


【解决方案1】:

我是一个崇高的新手,但这对我有用。我相信你有两个问题:

  1. 弄清楚如何将 PATH 环境(Sublime 看到的)设置为 unix 命令提示符的环境。在 Mac 上,我必须设置一个名为 environment.plist 的文件并在那里添加路径。这应该可以消除您的 awk 和 expr 错误。

  2. 这是我的 matlab.sublime-build:

    { "cmd": ["/Applications/MATLAB_R2011b.app/bin/matlab","<$file_name"] }

注意 $file_name 之前的

这并不完美:添加 nodesktop 和 nosplash 选项会导致错误。正如构建脚本现在所显示的那样,程序在终端中运行良好,但我仍然得到了启动。

【讨论】:

  • 好的,现在我有{ "cmd": ["/usr/local/MATLAB/R2012a/bin/matlab","-nosplash", "-r", "&lt;$file_name"], "selector": "source.m" } 用于构建文件。它以 nodisplay 模式成功启动 Matlab,并且不显示启动屏幕,但是一旦 Matlab 完成加载我的 startup.m 文件,Sublime 将其解释为[Finished in 8.4s]。这对我来说是一个正常的启动时间,但脚本没有运行仍然很奇怪。
  • 是的,你是对的。它不执行脚本。我拼凑在一起的命令行在 unix 提示符下工作正常,但这对我来说 now 在 sublime 内工作:` { "cmd": ["/Applications/MATLAB_R2011b.app/bin/matlab", " -nosplash", "
【解决方案2】:

刚刚尝试通过 Sublime 编译我的 Matlab 代码。插入您的 sublime-build sn-ps 并且它可以工作,谢谢!但是,我通常会编写与计算机视觉相关的代码,而你会经常这样做:

    img = doImageConversion();
    imshow(img);
    pause;

    img = doAnotherImageConversion();
    imshow(img);
    pause;

这里的问题是 sublime 不会在 pause 指令上停止。您可以通过用pause(3) 替换暂停来克服这个问题。虽然不是很满意!为了让构建真正停止,我发现这些 Matlab.sublime-build 设置非常方便:

{
    "cmd": ["xterm", "-e", "matlab", "-nosplash", "-nodesktop", "-r", "run $file_name; quit;"],
    "selector": "source.m"
}

这需要在您的 linux 发行版上安装 xterm。现在 Sublime 将启动 xterminal 那里运行 Matlab 文件,实际上停止暂停指令并最终退出。 我没有在较旧的 Matlab 版本上测试这个 sn-p。

干杯 无敌

【讨论】:

  • 嘿酷!在 Github 上 fork 我,看看它是否比已经贡献的更好。我已经把这个单独放置了几个月,它似乎正在解决。
【解决方案3】:

只是一个猜测——我没有在 SublimeText 中使用过构建系统——但你可能需要将-r 选项放在文件名之前。如果你运行matlab -r -nodesktop "mycommand",它会正常启动,尝试执行一个文件nodesktop,然后失败。

MATLAB 安装路径(通常,除非您以不同方式安装它)在r2012a 中也有一个小写的r。也许这是个问题。

我建议的最后一件事是同时使用 -sd 选项,它指定 MATLAB 启动目录。

希望这些想法有所帮助!

【讨论】:

  • 当你运行'matlab -r -nodesktop "mycommand"'时,错误信息是什么?我从运行“which matlab”复制了此处显示的路径,错误消息将原始命令路径与当前命令路径进行比较,它们是相同的。我会尝试切换“-r”,添加“-sd”开关,甚至可能使用“-nojvm”。稍后会更新。
  • 我切换了“-r”但无济于事。 “-sd”开关是 Windows 独有的。使用“-nojvm”开关也没有帮助。
【解决方案4】:

我的解决方案很大程度上是基于你的,但是我添加了try catch语句以避免多次打开matlab而不在出现错误后关闭它,我将命令创建为:

{
"cmd": ["/Applications/MATLAB_R2014b.app/bin/matlab","-nosplash", "-nojvm", "-r", "cd $file_dir; try run $file_name; catch varException; display(varException); end; quit;"], "selector": "source.m"
}   

如果您急于了解错误,请使用仅包含最新堆栈打印错误的另一个:

{
"cmd": ["/Applications/MATLAB_R2014b.app/bin/matlab","-nosplash", "-nojvm", "-r", "cd $file_dir; try run $file_name; catch varException; display(varException.message);display(varException.cause);display(varException.stack(1)); end; quit;"], "selector": "source.m"
}

最后,如果您真的想了解所有错误,请使用这个带有完整堆栈打印错误的最终版本:

{
    "cmd": ["/Applications/MATLAB_R2014b.app/bin/matlab","-nosplash", "-nojvm", "-r", "cd $file_dir; try run $file_name; catch varException; display(varException.message); display(varException.cause);for i = length(varException.stack):-1:1; display(varException.stack(i)); end; end; quit;"], "selector": "source.m"
}

【讨论】:

  • 当——好主意!谢谢你的分享!如果您愿意,也可以随意将其添加到 GitHub 上的存储库中。
猜你喜欢
  • 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
相关资源
最近更新 更多