yasnippet.el でスニペットを新規作成するのは M-x yas-new-snippet です。
regionの内容を足掛かりにスニペットを作成できれば便利ではないでしょうか?
スニペット内で「\」は「\\」に「$」は「\$」にエスケープする必要がありますが、その処理もしています。
以下の設定で可能になります。
この内容はpull-request を送っていますが、なかなか取り込まれないようなので今すぐ使えるようにここに置いておきます。
似たようなpull-requestもあるようです。
Fig1: regionを設定してM-x yas-new-snippetすると
Fig2: その部分がデフォルトの内容に!
設定 151029105601.yas-new-snippet-with-region.el(以下のコードと同一)
(require 'yasnippet) (defvar yas-original-buffer nil) (defun yas-new-snippet--with-region (&optional no-template) "Pops a new buffer for writing a snippet. Expands a snippet-writing snippet, unless the optional prefix arg NO-TEMPLATE is non-nil." (interactive "P") (let ((guessed-directories (yas--guess-snippet-directories))) (setq yas-original-buffer (current-buffer)) (switch-to-buffer "*new snippet*") (erase-buffer) (kill-all-local-variables) (snippet-mode) (yas-minor-mode 1) (set (make-local-variable 'yas--guessed-modes) (mapcar #'(lambda (d) (yas--table-mode (car d))) guessed-directories)) (when (and (not no-template) yas-new-snippet-default) (save-excursion (insert (yas-snippet-from-region))) (yas-expand-snippet yas-new-snippet-default)))) (defun yas-snippet-from-region () "Initial snippet content from region." (or (with-current-buffer yas-original-buffer (if (region-active-p) (replace-regexp-in-string "[\\$]" "\\\\\\&" (buffer-substring-no-properties (region-beginning) (region-end))))) "")) (advice-add 'yas-new-snippet :override 'yas-new-snippet--with-region)
実行方法
$ wget http://rubikitch.com/f/151029105601.yas-new-snippet-with-region.el $ emacs -Q -f package-initialize -l 151029105601.yas-new-snippet-with-region.el
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。