我正在尝试在我的~/.emacs
中使用以下内容来要求我已经安装并希望使用的软件包:
(map #'nil (lambda (x) (require x))
'(
undo-tree
savekill
wrap-region
free-keys))
但是,当我尝试通过让Emacs评估缓冲区来测试它时,我收到此错误:Symbol's function definition is void: map
当我正常启动emacs时出现相同的错误,我相信我已经解决了这个问题之前,但我不记得我是怎么做到的。
以下是我运行时获得的调试信息:emacs --debug-init
Debugger entered--Lisp error: (void-function map)
(map (function nil) (function (lambda (x) (require x)))
(quote (undo-tree savekill wrap-region free-keys)))
eval-buffer(#<buffer *load*> nil "c:/Users/rr257875/AppData/Roaming/.emacs" nil t) ; Reading at buffer position 944
load-with-code-conversion("c:/Users/rr257875/AppData/Roaming/.emacs" "c:/Users/rr257875/AppData/Roaming/.emacs" t t)
load("~/.emacs" t t)
#[0 "\205\262
答案 0 :(得分:4)
正如phils' answer所述,这个函数不起作用的原因是这个函数来自cl
库,它在Emacs Lisp中实现了Common Lisp函数。
有一个&#34;本地人&#34; Emacs Lisp函数可以执行您想要的操作:mapc
。它在每个序列元素上应用函数,并丢弃返回值。
(mapc #'require
'(
undo-tree
savekill
wrap-region
free-keys))
(还有mapcar
,就像用map
作为第一个参数调用'list
一样。)
答案 1 :(得分:3)
map is an alias for `cl-map' in `cl.el'.
首先你需要:
(require 'cl)
或者:
(require 'cl-lib)
(cl-map ...)