通过Sublime Text 2为MATLAB创建自定义构建系统

时间:2012-08-08 17:04:39

标签: matlab sublimetext2

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

在文档之后,我尝试使用下面这个非常合理的看似代码,其中'-r'标志启动MATLAB运行我的文件,“-nodesktop”标志启动MATLAB而没有大笨重的Java GUI,并且“ - nosplash“flag启动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脚本?我没有尝试在Sublime上为除Ubuntu 12.04之外的任何其他操作系统设置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

4 个答案:

答案 0 :(得分:3)

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

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

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

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

  3. 注意&lt;就在$ file_name之前。

    这并不完美:添加nodesktop和nosplash选项会导致错误。由于构建脚本现在已经存在,程序在终端中运行良好,但我仍然得到了启发。

答案 1 :(得分:2)

试图通过Sublime编译我的Matlab代码。插入你的sublime-build片段,它的工作原理,谢谢你!但是,我通常编写与计算机视觉相关的东西,你有点做这件事:

    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版本上测试此代码段。

干杯 lustiz

答案 2 :(得分:1)

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

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

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

希望这些想法有所帮助!

答案 3 :(得分:0)

我的解决方案很大程度上取决于您的解决方案,但是我添加了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"
}