我正在寻找编写一个yasnippet模板,该模板将允许我向Emacs中的脚本缓冲区添加许可证标头。有点像this,但有所改进:
(comment-region (point-min) (point))
。comment-style
变量,或者,如果您想查看框式注释的外观,只需在活动区域上调用M-x comment-box
:它使用正确的选项调用comment-region
。第一种方法是通过将上一个代码段的末尾修改为来设置样式:
(let ((comment-style 'box))
(comment-region (point-min) (point)))
不幸的是,凹痕被拧紧了,并且我的盒子不是矩形的。如果我从摘要开始:
Copyright (c) ${1:`(nth 5 (decode-time))`}
All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, are permitted`
(let ((comment-style 'box))
(comment-region (point-min) (point)))`
该代码段的扩展“打破了常规”(我正在使用ocaml注释语法调试该代码段,但这并不重要):
(**************************************************************)
(* Copyright (c) 2010 *)
(* All rights reserved. *)
(* *)
(* Redistribution and use in source and binary forms, with or *)
(* without modification, are permitted *)
(**************************************************************)
*)
到25个空格而不是4个空格,而不是4个空格。*)
应该也到达4个空格late,而不是soon。 comment-box
或此问题的第一个注释块中的elisp函数。为了避免任何副作用,我尝试将摘要添加到yas/after-exit-snippet-hook
中,以替换上面片段的最后一个功能,以免产生任何副作用:
yas/after-exit-snippet-hook
但是那没有帮助。即使这样做了,它也会给我留下一个扩展钩子,该钩子会注释我想在该缓冲区中使用的代码片段,但我当然不希望这样做。我还应该添加,我试图通过添加]来将(add-hook 'yas/after-exit-snippet-hook
(let ((comment-style 'box))
(comment-region (point-min) (point))) nil t)
设置为[C0
yas/indent-line
在我的代码片段的开头,但这没有任何改变。关于如何获取框的任何想法?矩形
Edit:
我们有fixed
(鸣谢,谢谢Seiji!),但是仍然存在一个问题,那就是如何使它适应想要重用字段的情况,例如# expand-env: ((yas/indent-line 'fixed))
的重用在:a very nice answer, along with a proposed fix,[在那种情况下,模板引擎在模板扩展时(缩进后)将为字段个字符。也许字段重用和正确的缩进太多,无法同时要求。有没有人看到这样做的方法?我正在寻找一个yasnippet模板,该模板将允许我向Emacs中的脚本缓冲区添加许可证标头。 Kinda像这样,但有所改进:标头需要包含每个用户的数据,例如...$1
获得的(可变长度)值复制到最后一行,即Copyright (c) ${1:`(nth 5 (decode-time))`} All rights reserved. Redistribution and use in $1, in source and binary forms `(let ((comment-style 'box)) (comment-region (point-min) (point-at-eol 0)))`
,也给注释行添加了2个字符)宽。编写模板时,很难预测在这一行应该remove
4
$1
(* Copyright (c) ${1:2011}${1:$(make-string (- 72 (string-width text)) ?\ )} *)
(* ${2}${2:$(make-string (- 72 (string-width text)))}*)