3

我使用一组文件(ASCII 可读),但扩展名很奇怪。所有这些中的注释字符是#

每次我评论行时,我都必须为每个文件打开关闭周期设置评论字符。有没有办法可以设置.emacs文件以知道要使用哪个注释字符?

4

4 回答 4

7

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

.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#注释字符开头。

于 2013-02-27T20:15:45.410 回答
6

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

(setq-default comment-start "# ")

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

于 2013-02-27T23:41:38.720 回答
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)
于 2013-02-27T21:17:52.797 回答
0

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

例如,您甚至可以将键绑定绑定到该函数。

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

于 2013-02-27T19:55:35.837 回答