【发布时间】:2017-04-07 17:25:43
【问题描述】:
我最近开始使用 Emacs,我正在尝试添加一个函数,将输入的句子拆分为单词列表(由一个空格分隔):
(defun split-by-one-space (string) ; from: http://cl-cookbook.sourceforge.net/strings.html
"Returns a list of substrings of string
divided by ONE space each.
Note: Two consecutive spaces will be seen as
if there were an empty string between them."
(loop for i = 0 then (1+ j)
as j = (position #\Space string :start i)
collect (subseq string i j)
while j))
(defun myfn (ss)
"documentation of fn: to be added"
(interactive "s\Enter some words: ")
(message "Read: %s" (split-by-one-space ss)))
我在文件夹~/.emacs.d/init.el 中保存了上面的内容,其中还有两个其他功能也被正确拾取和执行。但是,当我尝试使用M-x 方法执行它时,找不到上面的函数'myfn'。也找不到函数'split-by-one-space'。
问题出在哪里,我该如何解决?
编辑:
使用命令“emacs --debug-init”启动 Emacs 显示以下错误:
(invalid-read-syntax "#")
显然 \#Space 在 Emacs Lisp 中无法识别。我用'?\ ' 替换了它,这个错误就消失了。函数 myfn 现在可以执行了。但是,在执行它时,会显示以下错误:
Symbol's function definition is void: loop
显然循环部分需要用 Emacs Lisp 重写。
【问题讨论】:
-
SPLIT-BY-ONE-SPACE是 Common Lisp,而不是 Emacs Lisp。 -
M-x只会找到interactive functions。使用M-:执行任意elisp。 -
@Juancho:但它是交互式的。
-
您如何知道文件正在(重新)加载?如果您访问它并执行
M-x load-file RET会发生什么? -
我重启了 Emacs 很多次,但都没有帮助。重启电脑后还是不行。