2013-04-27 22 views
3

想,我有2个子目录yasnippets:Emacs的:只加载必要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) 

因此,它加载所有yasnippets在〜/ .emacs.d/yasnippets的所有子目录。

是否有可能使其按需加载的yasnippets?如果我打开一个PHP文件,并没有加载PHP模式的片段,加载它们。但在启动时不加载所有内容。

回答

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)的说明

+0

加载从其他模式下,可以'M-X亚斯 - 激活 - 额外mode'以及片段。 – DJJ 2014-09-27 15:46:39

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) 

这只是一个例子,但一个可以想见,有模挂钩和亚斯负荷目录之间的映射并且如果没有加载,他们只是加载特定的目录。