如何在html文件中扩展yasnippet片段

时间:2013-08-09 13:13:10

标签: emacs elisp yasnippet

我有一个创建空html文件的lisp脚本:

(let ((mode "html-mode"))

  (funcall (intern mode)))

(write-region "" nil "index.html")

然后我使用yasnippet生成基本的html文件: 我有一个名为“base”的片段(我按TAB键扩展它)

有没有办法在我的lisp脚本中使用此代码段?

我尝试,没有成功使用(yas / expand-snippet base)

感谢。

古尔旺。

修改

使用abo-abo的代码,我得到了一些效果很好的东西:

(defun create-web-site-test()
  (interactive)
  (setq msg (concatenate 'string "Create web site in : " default-directory))
  (if (y-or-n-p msg)
    (progn  
     (write-region "" nil "./index.html")
     (find-file "./index.html")
     (html-mode)    
     (insert "\nbase")
     (yas/expand)
     (save-buffer)
     (kill-buffer))
    (progn
      ;; Give up
      (message "Ok, nothing will be donne, bybye...")
      )))

我只需要使用Mx cd将当前目录设置到正确的位置。 可能有一个更有效的解决方案,无需在缓冲区中打开文件。但这个已经非常酷了。 谢谢abo-abo

1 个答案:

答案 0 :(得分:0)

这应该有效:

(progn
  (html-mode)
  (insert-file-contents "~/index.html")
  (insert "\nbase")
  (yas/expand))

请尝试阅读elisp手册。 这非常好。

UPD

我已经更新了这个功能。我知道你是新人。 为了得到一个好的答案,你需要清楚说明你的意思 想做。如果这个答案有用,请不要忘记 投票并接受。

此外,还应对您的代码提出一些评论:concat 对于字符串,而不是concatenate。而且最好不要 使用y-or-n-p - 只做你想做的事,和 如果你想中止,请使用 C-g

(defun create-test (directory)
  (interactive "D")
  (with-current-buffer (find-file-noselect 
                        (concat directory "index.html"))
    (delete-region (point-min) (point-max))
    (html-mode)
    (insert "base")
    (yas/expand)
    (save-buffer)
    (kill-buffer)))