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
Just a guess - I haven't used the build system in SublimeText - but you might need to put the
-r
option immediately before the filename. If you runmatlab -r -nodesktop "mycommand"
, it starts up normally, tries to execute a filenodesktop
, and fails.The MATLAB installation path also (typically, unless you've installed it differently) has a lower-case
r
inr2012a
. Maybe that's an issue.The last thing I could suggest is to also use the
-sd
option, which specifies the MATLAB startup directory.Hope those thoughts help!
I am a sublime newbie, but this worked for me. I believe you have two problems:
Figure out how to set the PATH environment (that Sublime sees) to be that of the unix command prompt. On a mac, I had to setup a file called environment.plist and add the path there. This should get rid of your awk and expr errors.
Here is my matlab.sublime-build:
{ "cmd": ["/Applications/MATLAB_R2011b.app/bin/matlab","<$file_name"] }
Note the < just before $file_name.
This isn't perfect: adding the nodesktop and nosplash options lead to errors. As the build script stands now, the program runs fine in the terminal, but I still get the splash.
just tried to get my Matlab code compiled through Sublime. Plugged in your sublime-build snippets and it works, thanks for that! However, I usually code computer vision related stuff where you kinda do this a lot:
The issue here is that sublime does not halt on
pause
instructions. You may overcome this by replacing the pauses bypause(3)
. Not quite satisfying though! To make the build actually halt I found these Matlab.sublime-build settings pretty handy:This requires xterm to be installed on your linux distribution. Now Sublime will start the xterminal running the Matlab file over there, actually halt on pause instructions and quit in the end. I didn't test this snippet on older Matlab versions.
Cheers lustiz
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:
And if you are eager to understand the errors, use this other one with just the most recent stack printing of errors:
Finally, if you are really into understanding all the errors, use this final version with full stack printing of errors: