Как я могу легко перезагрузить Eiscs lisp-код во время его редактирования? - PullRequest
12 голосов
/ 26 октября 2010

Как начинающий Emacs, я работаю над написанием второстепенного режима. Мой текущий (наивный) метод программирования elisp состоит из внесения изменений, закрытия Emacs, перезапуска Emacs и наблюдения за изменениями. Как я могу упростить этот процесс? Есть ли команда обновить все?

Ответы [ 6 ]

17 голосов
/ 26 октября 2010

Вы можете попытаться использовать MCx (eval-defun), который будет переоценивать форму верхнего уровня вокруг точки.В отличие от Mx eval-buffer или Cx Ce (exal-last-sexp), это приведет к сбросу переменных, объявленных с defvar и defcustom, к их начальным значениям, что может спровоцировать вас..

3 голосов
/ 26 октября 2010

Также попробуйте C-u C-M-x, который оценивает определение в точке и устанавливает там точку останова, поэтому вы попадаете в отладчик при нажатии этой функции.

M-x ielm также очень полезен в качестве более многофункционального Lisp REPL при разработке кода Emacs.

2 голосов
/ 08 ноября 2010

Что сказал Шон. Кроме того, у меня есть (eval-defun) привязка к ключу вместе с тестом. В этом случае цикл разработки становится: 1) функцией редактирования, 2) нажатием клавиши eval-and-test, 3) просмотра результатов, 4) повторения. Это чрезвычайно быстро.

Во время разработки я пишу тест, привязываю его к jmc-test, а затем использую вышеуказанную клавишу для запуска только что отредактированной функции. Я редактирую больше, затем снова нажимаю клавишу, снова проверяя. Когда функция работает, я запускаю jmc-test, редактирую другую функцию и пишу другую функцию jmc-test. Это почти всегда одна строка кода, так что просто наброситься.

(defun jmc-eval-and-test ()
  (interactive)
  (eval-defun nil)
  (jmc-test))
(define-key emacs-lisp-mode-map (kbd "<kp-enter>")  'jmc-eval-and-test)

(when t
  (defun myfunc (beer yum)
    (+ beer yum))
  (defun jmc-test () (message "out: %s" (myfunc 1 2))))

При редактировании «myfunc», если я нажимаю клавишу ввода, она выводит «out: 3».

2 голосов
/ 26 октября 2010

Mx eval-buffer должен это сделать.

1 голос
/ 26 октября 2010

Все зависит от того, что вы пишете и как вы это написали.Переключение режима должно дать вам новое поведение.Если вы используете [define-minor-mode][1], вы можете добавить в тело макроса код, который отключит переменную режима:

(define-minor-mode my-minor-mode 
  "doc string"
  nil
  ""
  nil
  (if my-minor-mode
      (progn
         ;; do something when minor mode is on
      )
    ;; do something when minor mode is off
    )

Но еще один способ быстро проверить это - создать новый Emacs.от вашего существующего:

M-x shell-command emacs&
0 голосов
/ 24 февраля 2016

Я просто определяю функцию с именем ldf (сокращение от load-file) в моем файле .emacs, как это:

(defun ldf (arg) (интерактивное "P") (файл загрузки (имя-файла-буфера)))

Как видите, эта маленькая функция ищет имя файла текущего буфера и затем загружает файл. Всякий раз, когда мне нужно перезагрузить текущий файл elisp буфера, просто введите «M-x ldf»

...