2013-04-27 2 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 yas-activate-extra-mode. – DJJ

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 каталогами нагрузки и просто загружать определенные каталоги, если они еще не были загружены.

Смежные вопросы