Создание пользовательской системы сборки для MATLAB через Sublime Text 2
Я редактировал мои .m файлы в Sublime Text 2 (в дальнейшем называемый Sublime для остальной части моего вопроса) уже довольно давно и недавно привык к использованию функции build в Sublime для запуска кода Python, Я пытался установить что-то подобное для файлов MATLAB. Я пытаюсь сделать это, потому что я устал запускать свой код и редактировать свой код в отдельных окнах.
Следуя документации, я попытался использовать этот очень разумный кажущийся код ниже, где флаг "-r" запускает MATLAB для запуска моего файла, флаг "-nodesktop" запускает MATLAB без большого неудобного графического интерфейса Java, а "- nosplash" запускает MATLAB без лишнего заставки. Селектор позволяет Sublime автоматически использовать эту систему сборки для m файлов, а переменная path устанавливает путь к каталогу, в котором будет запущен MATLAB (каталог найден, запущенный "which matlab" ).
Я знаю, что я могу установить предпочтительный текстовый редактор из GUI MATLAB, но я не заинтересован в этом. Я заинтересован в использовании Sublime как системы сборки в дополнение к текстовому редактору.
{
"cmd": ["matlab", "-r", "-nodesktop", "-nosplash", "$file_name"],
"selector": "source.m",
"path": "/usr/local/MATLAB/R2012a/bin"
}
При запуске build на моем файле без ошибок .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 через альтернативную систему сборки? Я не пытался настроить систему сборки для MATLAB в Sublime в любой другой операционной системе, кроме Ubuntu 12.04, если эта информация полезна.
Теперь он работает!
Вот мой Matlab.sublime-build
:
{
"cmd": ["/usr/local/MATLAB/R2012a/bin/matlab", "-nosplash", "<$file_name"],
"selector": "source.m"
}
Обновление: теперь я размещаю файлы сборки Sublime Text 2 R2012a для Linux и Mac на моей странице Github в качестве примеров: https://github.com/jessebikman/Sublime-Text-2-build-Matlab-code
Ответы
Ответ 1
Я возвышенный новичок, но это сработало для меня. Я считаю, что у вас есть две проблемы:
-
Выясните, как установить среду PATH (что Sublime видит) в командной строке unix. На маке мне пришлось настроить файл с именем environment.plist и добавить туда путь. Это должно избавиться от ваших ошибок awk и expr.
-
Вот мой matlab.sublime-build:
{
"cmd": ["/Applications/MATLAB_R2011b.app/bin/matlab","<$file_name"]
}
Обратите внимание на < непосредственно перед $file_name.
Это не идеально: добавление параметров nodesktop и nosplash приводит к ошибкам. Поскольку сборка script стоит сейчас, программа отлично работает в терминале, но я все равно получаю всплеск.
Ответ 2
просто попытался получить мой код Matlab, скомпилированный через Sublime. Закрепляйте свои фрагменты sublime-build, и это работает, спасибо за это! Тем не менее, я обычно кодирую компьютерное зрение, связанное с тем, что вы делаете это много:
img = doImageConversion();
imshow(img);
pause;
img = doAnotherImageConversion();
imshow(img);
pause;
Проблема в том, что возвышенное не останавливается на инструкциях pause
. Вы можете преодолеть это, заменив паузы на pause(3)
. Не совсем приятно! Чтобы сделать сборку фактически остановленной, я нашел эти параметры Matlab.sublime-build довольно удобными:
{
"cmd": ["xterm", "-e", "matlab", "-nosplash", "-nodesktop", "-r", "run $file_name; quit;"],
"selector": "source.m"
}
Для этого требуется установить xterm в дистрибутив Linux. Теперь Sublime запустит xterminal, запустив файл Matlab, фактически остановившись на инструкциях по паузе и закройте в конце. Я не тестировал этот фрагмент на более старых версиях Matlab.
Приветствия
lustiz
Ответ 3
Догадка - я не использовал систему сборки в SublimeText, но вам может потребоваться поставить параметр -r
непосредственно перед именем файла. Если вы запустите matlab -r -nodesktop "mycommand"
, он запускается нормально, пытается выполнить файл nodesktop
и не работает.
Путь установки MATLAB также (как правило, если вы не установили его по-другому) имеет нижний регистр r
в r2012a
. Возможно, это проблема.
Последнее, что я мог бы предложить, - также использовать параметр -sd
, который указывает каталог запуска MATLAB.
Надеюсь, что эти мысли помогут!
Ответ 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"
}