无法在 Emacs 中添加功能
Cannot add function in Emacs
我最近开始使用 Emacs,我正在尝试添加一个函数,将输入的句子拆分为单词列表(拆分为一个 space):
(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
中,其中还有 2 个其他功能也已正确拾取并执行。但是,当我尝试使用 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 重写。
#\Space
不是有效的 Elisp 并且会导致读取错误,因此大多数 Emacs 将在此时停止处理您的文件。你想改为写 ?\s
或 ?\
,这是 Elisp 中用于字符文字的语法。
之后,您会看到 loop
不为 Emacs 所知。您想改用 cl-loop
,它由 cl-lib
包提供,因此您不仅需要将 loop
重命名为 cl-loop
,还需要添加
(require 'cl-lib)
早些时候。同样,Elisp 不知道 subseq
和 positions
,您需要使用 cl-subseq
和 cl-position
(也由 cl-lib
提供)。
我最近开始使用 Emacs,我正在尝试添加一个函数,将输入的句子拆分为单词列表(拆分为一个 space):
(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
中,其中还有 2 个其他功能也已正确拾取并执行。但是,当我尝试使用 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 重写。
#\Space
不是有效的 Elisp 并且会导致读取错误,因此大多数 Emacs 将在此时停止处理您的文件。你想改为写 ?\s
或 ?\
,这是 Elisp 中用于字符文字的语法。
之后,您会看到 loop
不为 Emacs 所知。您想改用 cl-loop
,它由 cl-lib
包提供,因此您不仅需要将 loop
重命名为 cl-loop
,还需要添加
(require 'cl-lib)
早些时候。同样,Elisp 不知道 subseq
和 positions
,您需要使用 cl-subseq
和 cl-position
(也由 cl-lib
提供)。