我使用一组文件(ASCII 可读),但扩展名很奇怪。所有这些中的注释字符是#
每次我评论行时,我都必须为每个文件打开关闭周期设置评论字符。有没有办法可以设置.emacs
文件以知道要使用哪个注释字符?
所有文件都存在于一个公共目录树中吗?
.dir-locals.el
如果是这样,那么您可以简单地在该树的顶层放置一个名为的文件,其内容为:
((fundamental-mode . ((comment-start . "#"))))
有关详细信息,请阅读:
C-hig (emacs) Directory Variables
RET
(这种方法的好处是使用 Emacs 访问这些文件的任何其他人也将从该.dir-locals.el
文件中受益。)
否则,我会倾向于使用该注释字符创建一个简单的派生模式,并将所有这些文件扩展名分配给它。如果您在许多不同的地方处理这些文件,那可能是要走的路:
(define-derived-mode my-mode fundamental-mode "MyMode"
"Comments start with `#'."
(set (make-local-variable 'comment-start) "#"))
(add-to-list 'auto-mode-alist '("\\.\(foo\|bar\)\\'" . my-mode))
这将使文件.foo
和.bar
扩展名my-mode
以#
注释字符开头。
将以下行放在 init.el 中的某处:
(setq-default comment-start "# ")
这将使“#”成为基本模式下的默认注释字符串,无论如何这是一个合理的默认值。
您可以使用这段代码,并调整变量以包含正则表达式对(匹配文件名(扩展名))和注释字符串。并且,如果您想设置comment-end
,请制作成对的三元组并相应地调整功能。
(defvar comment-based-on-extension-alist '((".el$" . "gg") (".txt$" . " >") (".odd$" . "$"))
"alist of regexps and comment characters")
(defun setup-comment-based-on-extension ()
(let ((alist comment-based-on-extension-alist))
(while alist
(when (string-match-p (caar alist) (buffer-file-name))
(setq comment-start (cdar alist))
(setq alist nil))
(setq alist (cdr alist)))))
(add-hook 'find-file-hook 'setup-comment-based-on-extension)
您可以做的是(setq comment-start "#")
每次在其中一个缓冲区中进行评估。这将确保当您(comment-region)
在一个区域上运行时,它会工作,以及与(comment-dwim)
.
例如,您甚至可以将键绑定绑定到该函数。
编辑:经过实验,我相信在您在 Emacs 中评估过一次之后,它会保持基本模式的状态。这应该非常方便,因为您只需评估一次。