我使用某组文件(ASCII可读)但使用奇怪的扩展名。所有这些中的评论字符都是#
每次我评论行时,我都必须为每个文件 - 开 - 关循环设置注释字符。有没有办法设置.emacs
文件来知道要使用哪个注释字符?
答案 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)