2010-03-04 3 views
2

Я хотел бы изменить MatLab скрипты в двух случаяхMATLAB скрипт редактирования

(1) В MatLab окне команд, выполняющихся в Linux терминала, как создавать и редактировать файл сценария? использование

edit(filename) 

будет вызывать интерактивный редактор, который нежелателен при работе на сервере linux.

(2) В emacs есть ли способ редактировать скрипт Matlab? Что лучше, используя MATLAB-Emacs или EmacsLink?

Когда я пытаюсь выполнить cvs checkout MATLAB-Emacs от http://sourceforge.net/scm/?type=cvs&group_id=154105, в каком modulename указать?

Спасибо!


EDIT:

При установке MATLAB-Emacs, есть некоторые проблемы. Я думал, что установлен мой Cedet здесь:

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

Мой Cedet имеет версию 1: 1.0pre4-3 (бесстрашный) на 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 и сделать сбой для меня следующим образом: сделать «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:' предыдущая строка ' используется из Lisp коды Этой команды предназначена для интерактивного использования только Написал /home/leo/.emacs.d/elisp/matlab-emacs/matlab-publish.elc марки: *** [сюсюкать] Ошибка 1 Могут кто-нибудь дает некоторые указатели на то, как отлаживать это? .. Эрик? .. :) –

ответ

5

Вы должны знать, что начиная с версии R2009a EmacsLink был удален из Matlab, поэтому я бы сказал, что на данный момент Matlab-Emacs является лучшей альтернативой. Основная сила EmacsLink была более жесткой и интеграции с Matlab, особенно при использовании отладчика, но текущая версия Matlab-Emacs вполне способна и, вероятно, удовлетворит потребности большинства людей, а также EmacsLink.

Для вызова Emacs из Matlab самым чистым решением является запуск сервера Emacs (запуск сервера M-x). Затем команда edit() может быть настроена для открытия скрипта в Emacs. приводятся подробные инструкции о том, как это сделать, а также о запуске MatLab-оболочки, как подчиненный процесс здесь:

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

Что касается CVS проверки: имя_модуля является «Matlab-Emacs». Вы имели обыкновение скачивать архив и просто распаковывать в свою папку elisp.

EDIT: Я решил переустановить Matlab-emacs; вот шаг за шагом того, что я сделал. (Шаги довольно очевидны, но это все равно может быть полезно, когда можно легко запустить в ошибку компиляции или неправильно интерпретировать некоторые инструкции). Обратите внимание, что matlab-emacs не скомпилировался, пока я не переустановил CEDET.

Скачать Cedet из http://cedet.sourceforge.net/ (1.0pre7 в моем случае) Распакуйте архив в ~/.emacs.d/Elisp/(теперь есть ~/.emacs.d/Elisp/Cedet-1.0pre7/каталог) Compile CEDET через make EMACS=/usr/bin/emacs Пока в ~/.emacs.d/Elisp, сделайте из CVS:

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

компилирования Matlab-Emacs через

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

В идеале, все должно составить; Теперь пришло время, чтобы редактировать файлы запуска: в .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 не открывает foo.m в emacs, убедитесь, что сервер запущен (запуск сервера M-x).

Чтобы быть наиболее продуктивным, вам может потребоваться выяснить, что для вас работает с точки зрения отправки команд из буфера редактирования в процесс matlab (эксперимент с ярлыками в справке режима). Наконец, если вам нужно отлаживать материал, сделайте dbstop in foo, и когда вы запустите foo, вы можете использовать команды семейства dbstop (посмотреть их) или включить панель инструментов (Mx tool-bar-mode) и использовать кнопки для управления точками останова , stepping, continue и т. д. Когда закончите, введите dbquit.

К сожалению, если вы работаете в Windows, то оболочка matlab не является вариантом (что немного удивительно, поскольку я могу запускать практически все остальное под солнцем из командной строки - Mathematica, R, numpy. ..) - так что ваши варианты жесткой интеграции emacs/matlab несколько ограничены (если вы не против запуска старой версии matlab, поддерживающей emacslink).

+0

Спасибо Лео! Можно ли редактировать скрипт в командном окне matlab в терминале? – Tim

+0

Я не знаю, как это сделать, кроме вышеупомянутого вызывающего emacsclient. Рабочий процесс, который я предпочитаю, заключается в том, чтобы запустить matlab внутри emacs с помощью matlab-shell и использовать разделенный экран между кодом и командным окном. Согласно приведенной выше ссылке, если теперь вы введете edit foo.m в командном окне, он должен открыть в emacs (но это не сработало для меня). Я просто открываю файлы непосредственно из emacs. Возможность сразу перейти в командную строку Matlab, нажав M-s, и отправить текущую строку или область (привязать ключ к (matlab-shell-run-region-or-line)) очень удобно! –

+0

Также обратите внимание на следующее: когда вы его скомпилируете: файл INSTALL дает вам неправильные указания, когда он говорит вам (требуется «matlab-load»), вместо этого используйте (load-library «matlab-load») (согласно README) –

4

Проект Matlab-emacs на http://matlab-emacs.sourceforge.net/ представляет собой немного более современную версию сценариев Emacs, доступных в каталоге EmacsLink, который поставляется с MATLAB. Вполне нормально использовать файлы проекта matlab-emacs с файлами EmacsLink, которые поставляются вместе с MATLAB. «Modulename» - это «matlab-emacs».

Я сделал сообщение в блоге о том, как использовать Emacs с MATLAB в более поздних версиях MATLAB, где была удалена поддержка EmacsLink. Вы можете прочитать здесь:

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

скрипты здесь показано, как настроить MATLAB для использования «emacsclient», так что файлы втягиваются в уже запущенном Emacs.

EDIT:

Система сборки немного несовершенен с частичной загрузкой. Тот факт, что matlab-publish не компилируется, не является критическим.

Код matlab-emacs из CVS включает в себя каталог инструментов с некоторым кодом M в нем. Когда вы запускаете этот код, он должен настроить MATLAB на использование emacsclient в качестве редактора. Я написал emacsinit.m против самого последнего MATLAB, поэтому вам может потребоваться отредактировать его со старыми MATLAB, которые не поддерживают все функции.

Чтобы запустить emacsclient из оболочки Matlab, путь должен быть настроен автоматически, и он должен автоматически запускать emacsclient. Если вы не используете matlab-shell, вам нужно будет добавить этот каталог к ​​вашему пути MATLAB, а затем вызвать emacsinit.

Если это не работает для звонков для редактирования, то я предполагаю, что более старый MATLAB не имеет одинаковых функций конфигурации. Вы можете запустить MATLAB один раз с включенным рабочим столом и использовать диалог настроек, чтобы указать внешний редактор как emacsclient -n.

+0

Спасибо, Эрик! Когда я запускаю «make», у меня возникла ошибка «Нет правила для создания target matlab-publish.el», необходимого bylisp ». Что не так? Пожалуйста, обратитесь к моему обновлению на мои вопросы. – Tim

+0

Эрик, ваше сообщение в блоге предполагает, что при использовании matlab-оболочки команда редактирования должна выводить файл в emacs. Это не работает для меня (запуск emacs в терминале с использованием Matlab-mode 3.2.0). Любые идеи по устранению неполадок? .. Я думаю, что это тоже то, что хочет OP. Кроме того, существуют ли более подробные инструкции по отладке с использованием оболочки Matlab (например, установка контрольных точек и т. Д.)? –

+0

Я хотел бы указать, что мне нужно было использовать команду 'emacsclient -n -a emacs23', чтобы сделать Emacs открытым, если еще не было открытого окна. –

0

Причина, по которой Matlab-publish.el не компилируется, потому что на самом деле это не загружается (при этом отсутствует) с помощью сценария MATLAB dl_emacs_support.m. Я также обнаружил, что сценарий загрузки также не загружал company-matlab-shell.el, который существует в tarball из CVS. Следовательно, когда вызывается make, возникает ошибка, когда требуемые файлы не найдены.

Хуже того, сценарий dl_emacs_support.m заменяется файлом из CVS, когда исходные файлы загружаются с помощью сценария в MATLAB. Патчи или модификации dl_emacs_support.m теряется после загрузки файлов.

Чтобы быть в безопасности, я рекомендую загрузить matlab-emacs из tarball на сервере CVS или проверить источник. Тогда компиляция должна идти хорошо.

Замечание о 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".

Смежные вопросы