2010-03-04 83 views
2

我想在两种情况下MATLAB脚本编辑

在Linux终端运行

(1)在MATLAB命令窗口,如何创建和编辑的脚本文件进行编辑MATLAB脚本?使用

edit(filename) 

将调用交互式编辑器,这在Linux服务器上运行时不需要。

(2)在emacs中,有没有方法可以方便地编辑matlab脚本?哪个更好,使用MATLAB-Emacs或EmacsLink?

当我试图从http://sourceforge.net/scm/?type=cvs&group_id=154105 CVS检出MATLAB-Emacs,我应该指定哪个模块名?

谢谢!


编辑:

当安装MATLAB的emacs的,有一些问题。我认为我的CEDET安装在这里:

/usr/share/emacs22/site-lisp/cedet-common 
/usr/share/emacs22/site-lisp/cedet-contrib 

我的CEDET版本为1:1.0pre4-3(intrepid)在Ubuntu上。所以我输入命令:

$ make "LOADPATH=/usr/share/doc/cedet-common /usr/share/doc/cedet-contrib"  
for loadpath in . /usr/share/doc/cedet-common /usr/share/doc/cedet-contrib; do \  
     echo "(add-to-list 'load-path \"$loadpath\")" >> autoloads-compile-script; \  
    done;  
"emacs" -batch --no-site-file -l autoloads-compile-script -f cedet-batch-update-autoloads matlab-load.el .  
Generatim autoloads for cedet-matlab.el...  
Generatim autoloads for cedet-matlab.el...done  
Generatim autoloads for matlab.el...  
Generatim autoloads for matlab.el...done  
Generatim autoloads for mlint.el...  
Generatim autoloads for mlint.el...done  
Generatim autoloads for semantic-matlab.el...  
Generatim autoloads for semantic-matlab.el...done  
Generatim autoloads for tlc.el...  
Generatim autoloads for tlc.el...done  
Generatim autoloads for semanticdb-matlab.el...  
Generatim autoloads for semanticdb-matlab.el...done  
Updatim header...  
Updatim header...done  
Wrote /home/tim/.emacs.d/matlab-emacs/matlab-load.el  
make: *** No rule to make target `matlab-publish.el', needed by `lisp'. Stop.  

怎么了?谢谢!

+0

嗯,我也试过检查出CVS的最新版本,并且让我失败了,如下所示: make“LOADPATH = ../cedet-1.0pre4/common ../cedet-1.0pre4/eieio ../ cedet-1.0pre4/semantic/bovine/../cedet-1.0pre4/semantic/“ 在matlab-insert-bullet-list: matlab-publish.el:248:4:Warning:'previous-line'从该命令是专为交互式使用Lisp代码 只用 写/home/leo/.emacs.d/elisp/matlab-emacs/matlab-publish.elc 化妆:*** [LISP]错误1 灿任何人都会给出一些关于如何调试的提示?.. Eric?.. :) – 2010-03-04 08:25:13

回答

5

您应该知道,从版本R2009a开始,EmacsLink已从Matlab中删除,所以我想说的是在这一点上,Matlab-Emacs是一个更好的选择。 EmacsLink的主要优点是与Matlab紧密集成,特别是在使用调试器时,但是当前版本的Matlab-Emacs功能非常强大,并且可能会像EmacsLink一样满足大多数人的需求。

为了从Matlab调用Emacs,最简洁的解决方案是运行Emacs服务器(M-x server-start)。然后可以设置edit()命令在Emacs中打开脚本。这里提供了关于如何做到这一点,以及运行MATLAB壳低人一等过程的详细说明:

http://blogs.mathworks.com/desktop/2009/09/14/matlab-emacs-integration-is-back/

关于CVS校验:模块名是“MATLAB-emacs的”。您曾经可以下载档案并简单地解压缩到您的elisp目录中。

编辑:我决定重新安装matlab-emacs;这是我所做的一步一步。 (这些步骤非常明显,但这可能仍然很有用,看看如何轻松地遇到编译错误或误解某些指令)。请注意,直到我重新安装CEDET之前,matlab-emacs才会编译。

http://cedet.sourceforge.net/(1.0pre7在我的情况)

下载CEDET 解压缩文档解压缩到〜/ .emacs.d/elisp的/(现已〜/ .emacs.d/elisp的/ CEDET-1.0pre7 /目录) 编译CEDET通过make EMACS=/usr/bin/emacs 而在〜/ .emacs中。d/elisp的,做CVS签:通过

make "LOADPATH=../cedet-1.0pre7/common ../cedet-1.0pre7/eieio ../cedet-1.0pre7/semantic/bovine/ ../cedet-1.0pre7/semantic/" 

理想

cvs -z3 -d:pserver:[email protected]:/cvsroot/matlab-emacs co -P matlab-emacs 

编译MATLAB的emacs的,一切都应该编译;现在是时候来编辑启动文件:在添加的.emacs

(setq load-path (cons "~/.emacs.d/elisp/matlab-emacs/" load-path)) 
(load-library "matlab-load") 

matlab's startup.m添加

addpath('~/.emacs.d/elisp/matlab-emacs/toolbox','-begin'); 
rehash; 
emacsinit; 

应该这样做!启动emacs,并执行M-x matlab-shell。如果编辑foo.m没有在emacs中打开foo.m,请确保服务器已启动(M-x服务器启动)。

要最有成效的,您可能希望找出你在从编辑缓冲器发送命令到MATLAB程序(实验的模式帮助快捷方式)方面的作品。最后,如果您需要调试东西,请执行dbstop in foo,并且在运行foo时,可以使用使用dbstop系列命令(查看它们)或打开工具栏(Mx工具栏模式)并使用那里的按钮来控制断点,步进,继续等等。完成后,键入dbquit。不幸的是,如果你在Windows上,matlab-shell不是一个选项(这有点令人惊讶,看到我可以从命令行--Mathematica,R,numpy在太阳下运行几乎所有的东西。 ..) - 所以你对紧密emacs/matlab集成的选择是有限的(除非你不介意运行支持emacslink的旧matlab版本)。

+0

感谢Leo!是否可以在终端的matlab命令窗口中编辑脚本? – Tim 2010-03-04 01:54:09

+0

除了前面提到的调用emacsclient之外,我不知道如何去做。我更喜欢的工作流是使用matlab-shell在emacs内部运行matlab,并在代码和命令窗口之间使用拆分屏幕。根据上面的链接,如果您现在在命令窗口中键入编辑foo.m,它应该在emacs中打开(但它不适用于我)。我其实只是直接从emacs打开文件。通过按下M-s直接跳转到Matlab命令行,并发送当前行或区域(绑定键为(matlab-shell-run-region-or-line))的功能非常方便! – 2010-03-04 07:56:59

+0

还要注意以下几点 - 当你得到这个编译时:当INSTALL文件告诉你(需要'matlab-load'),而不是使用(load-library“matlab-load”)时, ) – 2010-03-04 08:54:39

4

http://matlab-emacs.sourceforge.net/的matlab-emacs项目是MATLAB随附的EmacsLink目录中可用的Emacs脚本的稍微更新的版本。将matlab-emacs项目文件与MATLAB附带的EmacsLink文件一起使用是可以的。 “modulename”是“matlab-emacs”。

我犯了一个博客张贴有关如何在其中EmacsLink支持滴入MATLAB的较新版本与MATLAB使用Emacs。你可以在这里阅读:

http://blogs.mathworks.com/desktop/2009/09/14/matlab-emacs-integration-is-back/

这里的脚本显示了如何调整MATLAB来使用“emacsclient”,让文件在一个已经运行的Emacs的拉升。

编辑:

构建系统是有点不完美的部分下载。 matlab发布没有编译的事实并不重要。

从CVS的MATLAB-emacs的代码包括在它的一些M代码工具箱目录。当你运行该代码时,它应该设置MATLAB来使用emacsclient作为编辑器。我对最新的MATLAB编写了emacsinit.m,因此您可能需要使用不支持所有功能的旧版MATLAB进行编辑。

运行从MATLAB壳emacsclient,路径应自动进行设置,它会自动运行emacsclient。如果你不使用matlab-shell,你将需要将该目录添加到你的MATLAB路径,然后调用emacsinit。

如果它不工作呼叫进行编辑,然后我猜旧的MATLAB不具有相同的配置功能。启用桌面后,可以启动MATLAB一次,然后使用“首选项”对话框将外部编辑器指定为emacsclient -n。

+0

谢谢,埃里克!当我运行“make”时,出现错误“No rule to make target matlab-publish.el',需要bylisp'”。哪里不对?请参考我的问题更新。 – Tim 2010-03-04 01:53:01

+0

Eric,你的博客文章建议,当使用matlab-shell时,编辑命令应该在emacs中调出文件。这对我不起作用(在终端中运行emacs,使用matlab模式3.2.0)。关于如何解决问题的任何想法?..我认为这也是OP想要的。此外,是否有更详细的说明如何使用matlab-shell进行调试(例如设置断点等)? – 2010-03-04 08:59:37

+0

我想指出的是,如果没有打开窗口,我需要使用命令'emacsclient -n -a emacs23'来使Emacs打开。 – 2012-04-05 15:37:24

0

MATLAB的publish.el没有编译的原因是因为实际上它不是下载(从而错过)由MATLAB脚本dl_emacs_support.m。我还发现下载脚本也没有下载company-matlab-shell.el,它存在于CVS的tarball中。因此,如果调用make,则在找不到所需文件时会发生错误。

更糟糕的是,当通过在MATLAB中执行脚本来下载源文件时,将用来自CVS的文件替换dl_emacs_support.m脚本。修补程序或修改dl_emacs_support.m因此在文件下载后会丢失。

为了安全起见,我建议从CVS服务器上的tarball下载matlab-emacs,或者检查源代码。汇编应该顺利。

备注关于CEDET:我检查了CEDET源代码并且没有汗水编译它。如果使用的是Ubuntu的,我相信在资源库中的下列软件包应该编制MATLAB的emacs的前安装:CEDET常见义德EIEIO语义speedbar。这些包安装到/usr/share/emacs/site-lisp,所以LOADPATH应该是"/usr/share/emacs/site-lisp/cedet-common /usr/share/emacs/site-lisp/ede /usr/share/emacs/site-lisp/eieio /usr/share/emacs/site-lisp/semantic /usr/share/emacs/site-lisp/semantic/bovine"