假设我有yasnippets的2个子目录:
~/.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所有子目录中的所有yasnippets。
是否有可能按需加载yasnippets?如果我打开一个php文件,并且没有加载php-mode的片段,请加载它们。但是不要在启动时加载所有内容。
答案 0 :(得分: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
)
答案 1 :(得分: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)
这只是一个例子,但可以想象有一个模式挂钩和yas加载目录之间的映射,只是加载特定目录(如果它们尚未加载)。