Emacs索赔I';我引用的是lambda,但我';我不是

Emacs索赔I';我引用的是lambda,但我';我不是,emacs,clojure,elisp,emacs24,Emacs,Clojure,Elisp,Emacs24,我在emacs中的init.el中添加了以下内容: (add-hook 'emacs-startup-hook (lambda () (kill-buffer "*scratch*") (ido-mode t) (global-visual-line-mode 1))) (add-hook 'clojure-mode-hook (lambda () (rainbow-delimiters-mode 1))) 现在emacs自动将单词lambda转换为符号

我在emacs中的init.el中添加了以下内容:

(add-hook 'emacs-startup-hook
  (lambda ()
    (kill-buffer "*scratch*")
    (ido-mode t)
    (global-visual-line-mode 1)))

(add-hook 'clojure-mode-hook
 (lambda ()
    (rainbow-delimiters-mode 1)))
现在emacs自动将单词
lambda
转换为符号lambda,但我不知道这是否是问题所在。当我启动emacs时,它会报告:

(lambda(line)…)用“而不是#”引述

但我不是在引用lambda。如果我删除上面的代码行,错误就会消失

为什么它会给我这个错误

  • 警告中的
    lambda
    有一个
    参数;你的钩子没有。您的init文件中有一个不同的带引号的
    lambda
    ,或者这是字节编译器中的一个错误

  • 根本没有理由引用lambdas;你做得对

  • 我认为您使用emacs startup hook的方式不正确;只需将
    (ido模式t)
    (全局可视线模式1)
    按原样放入init文件


  • 这不是代码中的错误,而是由您正在调用的函数之一调用的Emacs提供的某些代码中的错误。很有可能

    您的代码是合适的,但正如sds所指出的,您使用
    emacs启动挂钩将事情过度复杂化了。在加载
    .emacs
    时,大多数事情都可以正确完成

    (ido-mode t)
    (global-visual-line-mode 1)
    (add-hook 'emacs-startup-hook
      (lambda ()
        (kill-buffer "*scratch*")))
    
    我能想到的使用
    emacs启动钩子的唯一原因是,如果您经常重新加载
    .emacs
    ,并且经常更改
    ido模式
    全局可视线模式
    ,并且不希望在重新加载
    .emacs
    时将它们还原


    有关从Emacs中获得比杀死
    *scratch*
    更多信息的其他方法,请参阅和。

    上述
    lambda
    中没有
    字段
    参数。它一定是另一个
    lambda
    @Tobias不确定它是否有区别,但实际上它使用了“行”而不是“字段”这个词。我已经更新了这个问题。我无法想象它是任何其他lambda,因为如果我去掉上面的,错误就会消失,所有的东西都会加载。这没有什么区别。在init文件中搜索
    ”(lambda
    无论如何。我的印象是,有时候字节编译器对需要重新编译的内容和不需要重新编译的内容太聪明了。引用的lambda可以在其他地方。