我有一个创建空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
答案 0 :(得分:0)
这应该有效:
(progn
(html-mode)
(insert-file-contents "~/index.html")
(insert "\nbase")
(yas/expand))
请尝试阅读elisp手册。 这非常好。
我已经更新了这个功能。我知道你是新人。 为了得到一个好的答案,你需要清楚说明你的意思 想做。如果这个答案有用,请不要忘记 投票并接受。
此外,还应对您的代码提出一些评论: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)))