2010-03-04 89 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"