安装YASnippet

5

我已安装了YASnippet,并进行了以下配置:

(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet-0.6.1c")
(require 'yasnippet) ;; not yasnippet-bundle

(yas--initialize)
(yas/load-directory "~/.emacs.d/packages/yasnippet-0.6.1c/snippets")

然而,当我启动Emacs时,它会给出一个错误:

Warning (initialization): An error occurred while loading `/home/alexander/.emacs':

Symbol's function definition is void: yas--initialize

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.
(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet-0.6.1c")
(require 'yasnippet) ;; not yasnippet-bundle

(yas--initialize)
(yas/load-directory "~/.emacs.d/packages/yasnippet-0.6.1c/snippets")

我做错了什么?我已经尝试寻找答案,但没有成功。(我也尝试了另一个版本的yasnippet yasnippet-0.6.1b,但结果一样。)
2个回答

5

仅仅一眼看去,那

(yas--initialise)

应该是

(yas/initialize)

我正在运行版本为0.6.1,但该软件包中没有名为yas--initialize的函数。

我的初始化代码如下:

(require 'yasnippet)
(yas/initialize)
(yas/load-directory
 (dot-emacs "elpa/yasnippet-0.6.1/snippets"))

我认为你只是在某个地方得到了一些混乱的初始化代码。
编辑
我应该省略我的示例中的load-directory调用,因为这不是关键。但值得一提的是,dot-emacs只是一个与配置无关的函数,我用它来引用相对于我的初始化文件的文件。
(defun dot-emacs (relative-path)
  "Return the full path of a file in the user's emacs directory."
  (expand-file-name (concat user-emacs-directory relative-path)))

现在它说:“Symbol的函数定义是空的:dot-emacs” - AlexanderNajafi
@mr.axelander,我忘了提到dot-emacs是我的自定义函数。你提供的yas/load-directory代码应该没问题。对于混淆感到抱歉。 - harpo
非常好的回答(并且感谢您提供 dot-emacs,作为一个新手,它成为了我的 .emacs 的新补充;-))! - Rick77
@Rick77,很高兴听到这个好消息 :) 虽然现在的事情更简单了。如果你通过包管理器(M-x list-packages)获取 yasnippet 并将你的片段保存在 ~/.emacs.d/snippets 下(默认情况下它已经包含了),就不需要进行任何特殊的配置了。我在 init 中唯一要做的就是 (yas-global-mode) - harpo
@harpo:感谢您的提示!我已经使用过包管理器了(几周前就发现了,当时因为遇到了有关yasnippet和autocomplete的问题。实际上我现在仍然有这个问题;D),但由于某些未知原因,我想将我的代码片段安装在.emacs.d/my-snippets中,所以来到这里(记录一下,在包含该目录之前,唯一有效的方法是使用 (yas/compile-directory (dot-emacs "my-snippets")))。无论如何,还是非常感谢您的帮助(随着我对emacs的了解越来越深入,它变得越来越好用;-))! - Rick77

4

提醒一下,如果您升级了,请注意:您得到的信息对于版本0.8是正确的,但对于0.7及以下版本,则应使用yas/initialize。 请参见此提交记录


是的,这让我困惑了一段时间。我从YAS网站获取了init.el代码,该网站说我应该使用(yas/initialize),但那行不通,会产生错误Symbol's function definition is void: yas/initialize。我决定在init.el中尝试(yas--initialize),这对我有效。 - Ubiquitous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接