3

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 のすべてのサブディレクトリにあるすべての yasnippet をロードします。

要求に応じて yasnippets をロードすることは可能ですか? php ファイルを開いて、php-mode のスニペットが読み込まれていない場合は、読み込みます。ただし、起動時にすべてをロードしないでください。

4

2 に答える 2

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)

于 2013-04-27T10:24:12.963 に答える
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)

これは単なる例ですが、mode-hooks と yas ロード ディレクトリの間にマップを作成し、まだロードされていない場合は特定のディレクトリをロードすることも考えられます。

于 2013-04-27T08:51:47.713 に答える