17

我一直在 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

4

4 回答 4

3

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

  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 选项会导致错误。正如构建脚本现在所显示的那样,程序在终端中运行良好,但我仍然得到了启动。

于 2012-08-10T13:09:34.330 回答
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 版本上测试这个片段。

干杯鲁斯蒂兹

于 2012-12-15T14:33:55.753 回答
1

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

MATLAB 安装路径(通常,除非您以不同方式安装它)rr2012a. 也许这是个问题。

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

希望这些想法有所帮助!

于 2012-08-09T09:59:43.927 回答
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"
}
于 2018-12-08T11:39:39.460 回答