3

假设,我有 2 个 yasnippets 子目录:

~/.emacs.d/yasnippets/perl-mode
~/.emacs.d/yasnippets/php-mode

目前我在我的 .emacs 中使用以下代码:

(defvar *my-emacs-lib-dir* "~/.emacs.d/")
(load (concat *my-emacs-lib-dir* "plugins/yasnippet/yasnippet"))
(setq yas/snippet-dirs nil)
(yas/initialize)

;; Develop and keep personal snippets under ~/emacs.d/yasnippets
(setq yas/root-directory (concat *my-emacs-lib-dir* "yasnippets"))
(yas/load-directory yas/root-directory)

因此,它会加载 ~/.emacs.d/yasnippets 的所有子目录中的所有 yasnippet。

是否可以让它按需加载 yasnippets?如果我打开一个 php 文件,但未加载 php-mode 的片段,请加载它们。但不要在启动时加载所有内容。

4

2 回答 2

3

如果我没记错的话,在新版本中,如果您使用推荐的加载顺序,将按需执行片段的加载:

(add-to-list 'load-path "~/path-to-yasnippet")
(require 'yasnippet)
(yas-global-mode 1)

您还可以use-jit对函数使用可选标志yas-load-directory,这将强制从该目录按需加载片段。请参阅此功能的说明 ( C-h f yas-load-directory)

于 2013-04-27T10:24:12.963 回答
0

也许这样的事情可以工作。

(defvar yas/loaded-php-snippets nil)

(defun yas/load-php-snippets()
   (if (not yas/loaded-php-snippets)
    (progn
      (yas/load-directory  (concat yas/root-directory) "/php-mode")
      (setq yas/loaded-php-snippets t))))

(add-hook 'php-mode-hook 'yas/loaded-php-snippets)

这只是一个示例,但可以想象在 mode-hooks 和 yas 加载目录之间存在映射,如果特定目录尚未加载,则仅加载它们。

于 2013-04-27T08:51:47.713 回答