Emacs - 按文件扩展名设置注释字符

时间:2013-02-27 19:12:05

标签: emacs commenting

我使用某组文件(ASCII可读)但使用奇怪的扩展名。所有这些中的评论字符都是#

每次我评论行时,我都必须为每个文件 - 开 - 关循环设置注释字符。有没有办法设置.emacs文件来知道要使用哪个注释字符?

4 个答案:

答案 0 :(得分:7)

所有文件都存在于公共目录树中吗?

如果是这样,那么您只需将名为.dir-locals.el的文件放在该树的顶层,其内容为:

((fundamental-mode . ((comment-start . "#"))))

详情请阅读:
C-h i g (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开头,并带有#注释字符。

答案 1 :(得分:6)

将以下行放在init.el中的某处:

(setq-default comment-start "# ")

这将使“#”成为基本模式下的默认注释字符串,无论如何这都是合理的默认值。

答案 2 :(得分:0)

您可以做的是每次在其中一个缓冲区中评估(setq comment-start "#")。这将确保您在某个区域上运行(comment-region)时,它将起作用,以及(comment-dwim)

您甚至可以将键绑定绑定到该实例上作为函数。

编辑:经过实验,我相信在Emacs中对它进行一次评估后,它将保持基本模式的状态。这应该非常方便,因为您只需要评估一次。

答案 3 :(得分:0)

您可以使用此代码段,并调整变量以包含正则表达式对(匹配文件名(扩展名))和注释字符串。并且,如果您想设置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)