4

我通常在我的暂存缓冲区上使用 elisp 代码。我发现很难使用以这种方式移动光标的 elisp 代码,因为我不知道如何将用于编辑代码的缓冲区和用于测试代码的缓冲区分开。

例如,如果我想使用以下代码:

(backward-up-list 1)
(backward-sexp 1)
(kill-sexp 2)

通过使用智能括号计数 elisp 进行搜索,我想一次运行一行并查看每一行的作用。但是代码将插入符号移动到我粘贴该代码的临时缓冲区中,并且我已经在使用该插入符号来编辑或运行代码。另一个问题是该代码应该在 TeX 文档上进行测试,而我的暂存缓冲区不是 TeX 文档。

这一切都归结为如何将画家和绘画分开。

尽管在该示例中,仅查看 Ch f 手册就足以了解发生了什么。但这只是因为这个示例代码足够简单。

4

4 回答 4

5

用 edebug (C-u C-M-x而不是) 编译函数,切换到一个缓冲区进行试验,通过 M-: 调用函数,然后在调试器中C-M-x单步 ( )。n

否则,请学会从更大的块中思考,并使用 M-: 在您的测试缓冲区中进行测试。这就是我为几乎所有事情所做的,包括像cperl-mode这样的非常复杂的代码。

于 2009-07-01T10:08:05.677 回答
3

除了M-:(即eval-expression)之外,还请看with-selected-window. 它在给定窗口的上下文中执行其主体。例如,假设您有两个窗口,

(with-selected-window (next-window)
  (backward-up-list 1))

backward-up-list在另一个窗口中执行操作。

于 2009-07-01T13:21:14.867 回答
1

我发现了一些其他解决方法(类似于 with-selected-window)

将 set-buffer 与 progn 一起使用:

(progn
  (set-buffer "edithere.el")
  (insert "hello")
  (beginning-of-line))

缓冲区名称 edithere.el 必须存在。按 CMx 评估 progn 表格。你也可以使用让。当你想编写一个编辑缓冲区或移动光标的命令时,你可以像上面一样以“(progn ...”开头,而不是从“(defun ...”开始,一旦完成,更改为defun。

使用 with-current-buffer:(按 CMx 评估 with-current-buffer 形式)

(with-current-buffer "edithere.el"
  (insert "hello")
  (beginning-of-line))
于 2009-10-09T20:02:20.437 回答
0

C-x 4 f. 键入文件名:foo.el. 把你的代码放在那里,然后在那里测试。Lot 比*scratch*缓冲区好(一方面是 Emacs-Lisp 模式),而且您可以更轻松地保存您的工作。

于 2011-09-05T00:36:51.033 回答