我刚刚开始用Matlab进行实验,因为我已经习惯了Vim的界面,所以我尽量避免使用Matlab的编辑器。令我感到不安的是,每次我启动.m文件时,都会显示界面。
有没有办法从cmd行启动test.m,让它在cmd上输出,就像在Matlab的环境中一样。 有点像“Matlab shell”(比如Python,只有Matlab)?
答案 0 :(得分:10)
要回答您的问题,请按照以下方式启动matlab:
matalb -nodesktop -nosplash
这适用于linux和windows。在linux上,在命令提示符下键入它,matlab将在文本模式下的同一命令窗口中运行。所以你会得到你想要的“matlab shell”。在Windows上,cd进入安装了matlab的目录,然后键入相同的命令。它将打开一个精简的matlab命令行窗口,没有matlab桌面的所有铃声和口哨声。
现在我个人认为,带有集成调试器的matlab编辑器是你的朋友。如果有帮助的话,它还有emacs键绑定。当matlab以文本模式运行时,执行命令并在matlab桌面中查看结果也更容易。你真正想要使用文本模式的唯一一次是你的matlab代码需要很长时间才能运行,而你只对最终结果感兴趣。或者,如果您正在运行多个matlab实例。文本模式占用的内存要少得多,在Linux上,您可以轻松地从命令行开始运行并将其置于后台。
实际上,检查matlab的命令行参数。你可以做其他有趣的事情,比如让matlab执行单个函数并退出,la perl,或者将脚本重定向到matlab,如下所示:matlab < script.m
答案 1 :(得分:5)
你真的愿意做没有m文件调试器的开发工作吗?在我看来,这将限制你几乎琐碎的程序。经过一个非常简短的学习曲线,我认为你会发现Matlab集成调试器太棒了(我是VS的人)。
如果您坚持这样做,最好的选择是将您的m文件编译为独立运行。这需要访问(不便宜)matlab compiler。
请注意,使用高达6.5的matlab版本分发的编译器与使用matlab 7+分发的编译器(不知道编译器版本号)之间存在显着差异。在6.5中,编译器生成了c代码,可以单独编辑和编译。从7开始,编译器没有对此进行编译,转换或任何代码生成:今天运行“编译”程序实际上在名为MCR的虚拟Matlab机器上运行它 - 它几乎包含所有matlab功能。这是一个巨大的 - MCR安装程序(安装程序!)上次我检查时加权130M 关于这方面的一些争论仍然可以在新闻组中找到,但现在这并不重要。事实上,MCR方法似乎更接近您的追求。
顺便说一句,对我来说matlab -nosplash -nodesktop
在Windows上完美运行 - 它启动matlab作为控制台,但这会剥夺文本编辑器和调试器......
答案 2 :(得分:2)
我要做的是:
我无法想象为什么这不起作用的原因,因为MATLAB不应该关心用于编辑文件的内容。
这不会给你一个“shell”,而是整个GUI,但我想不出你为什么不想拥有它的任何理由,如果有的话。
答案 3 :(得分:0)
在Linux环境中,可以在文本模式下启动Matlab
matlab -nosplash -nodesktop
但这不适用于Windows。在当前shell中启动它。在Windows上,这将打开一个新的纯文本窗口。我知道无法让它在Windows上的当前控制台内运行。
也许你可以通过某种方式在http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/ref/matlabwindows上附加它。 shtml&amp; http://www.google.com/search?rlz = 1C1GGLS_enUS302US311&amp; sourceid = chrome&amp; ie = UTF-8&amp; q = matlab + command + line + windows'&gt;自动服务器模式。
另一个选择,如果你真的很绝望,可以创建一个虚拟机并在其中安装linux。然后我想象有一些方法可以配置vim与Matlab很好地配合(我现在是emacs人,并且有针对emacs的解决方案)。
答案 4 :(得分:0)
我和Kigurai有同样的问题。我需要用Python驱动Matlab,所以我找到了这个解决方案:
在Python中:
import os
os.chdir('W:\\monrépertoire')
os.spawnl(os.P_NOWAIT, 'monscript.bat')
在monscript.bat中:
matlab.exe -r interp_3D -nodesktop –nosplash
答案 5 :(得分:0)
有些情况下确实不需要太多调试,并且在调用之间应保留Matlab的状态。一个(唯一的?)示例是Emacs org-mode。它可用于根据literate programming etc编写与代码交错的文本。虽然可以在Matlab中使用注释,publish code可以使用HTML或LaTeX,但它确实需要让Emacs感到舒适。
有一个standalone program available使用Matlab引擎来评估stdin上收到的命令,并转储结果。但是,这个特定版本缺乏对if / else / end或for / end等多行命令的支持。这是engEvalString的限制,它同时期望所有内容。有一个ugly workaround available使usable足够用于org-mode。
#+begin_src matlab :session *MATLAB* :exports none :cache no :results value
if 3>1
'wow!!!'
end
#+end_src
#+RESULTS:
: wow!!!