String Emacs lisp:计算字符串列表

String Emacs lisp:计算字符串列表,string,emacs,lisp,elisp,yasnippet,String,Emacs,Lisp,Elisp,Yasnippet,我对elisp还不熟悉,但我正在尝试给我的.emacs增加一点趣味 我试图定义一些路径,但在创建路径列表(以及更具体地设置YaSnippet的列表)时遇到问题 当我计算列表时,我会得到一个符号名称的列表(而不是代码段想要的符号值) 我让代码工作,但有感觉,有更好的方法来做到这一点 以下是工作代码: ;; some paths (setq my-snippets-path "~/.emacs.d/snippets") (setq default-snippets-path "~/.emacs.d/

我对elisp还不熟悉,但我正在尝试给我的.emacs增加一点趣味

我试图定义一些路径,但在创建路径列表(以及更具体地设置YaSnippet的列表)时遇到问题

当我计算列表时,我会得到一个符号名称的列表(而不是代码段想要的符号值)

我让代码工作,但有感觉,有更好的方法来做到这一点

以下是工作代码:

;; some paths
(setq my-snippets-path "~/.emacs.d/snippets")
(setq default-snippets-path "~/.emacs.d/site-lisp/yasnippet/snippets")

;; set the yas/root-directory to a list of the paths
(setq yas/root-directory `(,my-snippets-path ,default-snippets-path))

;; load the directories
(mapc 'yas/load-directory yas/root-directory)

如果计算字符串列表,结果取决于列表项的值。最好的测试方法是启动ielm repl(M-x ielm),然后输入:

ELISP> '("abc" "def" "ghi")
("abc" "def" "ghi")
带引号的字符串列表计算为列表值。如果将列表的值存储在变量中,然后对变量求值,则ELisp将抱怨函数abc未知

ELISP> (setq my-list '("abc" "def" "ghi"))
("abc" "def" "ghi")

ELISP> (eval my-list)
*** Eval error ***  Invalid function: "abc"
对于yasnippet目录配置,您应该只设置yas snippet dir,例如

(add-to-list 'load-path
              "~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)

(setq yas-snippet-dirs
      '("~/.emacs.d/snippets"            ;; personal snippets
        "/path/to/yasnippet/snippets"    ;; the default collection
        "/path/to/other/snippets"        ;; add any other folder with a snippet collection
        ))

(yas-global-mode 1)
编辑:
已不推荐使用yas/root目录。根据

我想你想要

(setq yas/root-directory (list my-snippets-path default-snippets-path))

您正在寻找的是使用两个变量构造一个新列表。正如@jpkotta所描述的那样,确实可以使用list函数来实现这一点,尽管这不是列表的计算,而是列表的构造。不过,配置代码段目录的更有效且推荐的方法是将带有目录的字符串列表分配给变量yas snippet dirs。这个
(setq yas/root-directory (list my-snippets-path default-snippets-path))