Emacs: загружать только необходимые яснипец
Предположим, у меня есть 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)
Таким образом, он загружает все yasnippets во всех подкаталогах ~/.emacs.d/yasnippets.
Можно ли заставить его загружать яснипеты по требованию? Если я открываю файл php, и фрагменты для режима php не загружаются, загружайте их. Но не загружайте все при запуске.
2 ответа
Если я правильно помню, в свежих версиях загрузка фрагментов будет выполняться по запросу, если вы будете использовать рекомендуемую последовательность загрузки:
(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
)
Может быть, что-то подобное может работать.
(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, и просто можно загружать определенные каталоги, если они еще не загружены.