Creating custom build system for MATLAB through Sublime Text 2

Viewed 14023

I have been editing my .m files in Sublime Text 2 (henceforth referred to as Sublime for the remainder of my question) for quite some time now, and having recently become accustomed to using the build function in Sublime for running Python code, I was trying to setup something similar for MATLAB files. I am attempting to do this because I am tired of running my code and editing my code in separate windows.

Following the documentation, I tried using this very reasonable seeming code below, where the '-r' flag launches MATLAB to run my file, the "-nodesktop" flag launches MATLAB without the big hulking Java GUI, and the "-nosplash" flag launches MATLAB without the unnecessary splash screen. The selector allows for Sublime to automatically use this build system on m files, and the path variable sets the path to the directory that will launch MATLAB (directory found by running "which matlab").

I am aware that I can set an preferred text editor from within the MATLAB GUI, but I am not interested in doing that. I am interested in using Sublime as a build system in addition to a text editor.

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

Upon running build on my errorless .m file, I find this error below, which doesn't make sense. I don't think it makes sense because have launched MATLAB with the standard command line options, and am receiving MATLAB internal errors, too.

/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]

Has anybody else had problems like this invoking MATLAB scripts via an alternate build system? I have not tried to set up a build system for MATLAB in Sublime on any other operating system besides Ubuntu 12.04, if that information is useful.

It works now! Here is my Matlab.sublime-build:

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

Update: I'm now hosting Sublime Text 2 R2012a build files for Linux and for Mac on my Github page as examples: https://github.com/jessebikman/Sublime-Text-2-build-Matlab-code

4 Answers

My solution is much based on yours, but I added the try catch statement to avoid open matlab several times without closing it after an error, I created the command as:

{
"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"
}   

And if you are eager to understand the errors, use this other one with just the most recent stack printing of errors:

{
"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"
}

Finally, if you are really into understanding all the errors, use this final version with full stack printing of errors:

{
    "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"
}
Related