Emacs:仅加载必要的接头

Emacs:仅加载必要的接头,emacs,yasnippet,Emacs,Yasnippet,假设yasnippets有2个子目录: ~/.emacs.d/yasnippets/perl-mode ~/.emacs.d/yasnippets/php-mode 目前,我在my.emacs中使用以下代码: (defvar *my-emacs-lib-dir* "~/.emacs.d/") (load (concat *my-emacs-lib-dir* "plugins/yasnippet/yasnippet")) (setq yas/snippet-dirs nil) (yas/init

假设yasnippets有2个子目录:

~/.emacs.d/yasnippets/perl-mode
~/.emacs.d/yasnippets/php-mode
目前,我在my.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


有没有可能按需加载Yas管嘴?如果我打开一个php文件,但php模式的代码段没有加载,请加载它们。但不要在启动时加载所有内容。

也许类似的东西可以工作

(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加载目录之间存在映射,如果尚未加载特定目录,则只加载它们

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

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

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

要从其他模式加载代码段,您还可以
M-x yas激活额外模式