5

我有一个 XML 文件;在 emacs 23.2 中以 nxml 模式打开。

comment-region将该区域作为一个块进行注释,而不是对该区域中的每一行进行注释。在我看来,它使评论部分更具可读性。

前:

在此处输入图像描述

在“评论区域”之后:

在此处输入图像描述

希望之后:

在此处输入图像描述

在像 JavaScript 和 Java 这样的花括号语言中,comment-region 注释每一行,但我觉得这没问题,因为它使用单行注释前缀 , //,这保留了后续内容的可读性。对于 XML,我希望它有所不同。


编辑

我刚刚看到 Trey 关于 c-mode 的一个类似问题的旧答案:Emacs comment-region in C mode 基本上有一个名为的新模块newcomment.el定义了一堆注释样式。

这看起来很有希望,但它没有使用 nxml-mode 完全排序。例如,当我尝试box-multi作为一种样式时,评论部分看起来不错,但C-u comment-region并没有反转添加的内容。:/box风格也一样。我会再摆弄它一些。


编辑#2

这是我使用的代码,感谢 Alex Ott

(defun dino-xml-comment-region (beg end &optional arg)
  (interactive "*r\nP")
  (if (> beg end)
      (let (tmp) (setq tmp beg beg end end tmp)))
  (save-excursion
    (save-restriction
      (narrow-to-region beg end)
      (goto-char (point-min))
      (cond
       ;; is there a C-u prefix?
       ((and (listp arg) (> (length arg) 0))
        (and (re-search-forward "<!-- *[\n\r]" nil t)
             (goto-char (- (point-max) 1))
             (re-search-backward " *-->" nil t)
             (goto-char (point-min))
             (progn
               (re-search-forward "<!-- *[\n\r]" nil t)
               (replace-match "")
               (goto-char (- (point-max) 1))
               (re-search-backward "[\n\r] *-->" nil t)
               (replace-match ""))))

       (t
        (insert "<!--\n")
        (goto-char (- (point-max) 1))
        (unless (= 10 (following-char))
          (forward-char))
        (insert "\n-->"))))))

然后,在我的 nxml-mode-fn 中,我这样做了:

(local-set-key "\C-c\C-c"  'dino-xml-comment-region)

实际行为: 在此处输入图像描述

但是要小心:这完全是幼稚的,并且不会尝试“逃避”该区域内的干预评论开始和停止。如果有人想将其添加到上面的代码中,我将不胜感激,但我自己不会再担心。

4

2 回答 2

1

你可能会从类似的东西中获得一些里程

(add-hook 'nxml-mode-hook
          (lambda ()
            (set (make-local-variable 'comment-style) 'multi-line)
            (set (make-local-variable 'comment-continue) " ")))
于 2013-06-10T19:36:34.457 回答
1

它可能是这样的:

(defun xml-comment-region (beg end &optional arg)
  (interactive "*r\nP")
  (if (> beg end)
      (let (mid) (setq mid beg beg end end mid)))
  (save-excursion
    (save-restriction
      (narrow-to-region beg end)
      (goto-char (point-min))
      (insert "<!-- ")
      (goto-char (- (point-max) 1))
      (unless (= 10 (following-char))
    (forward-char))
      (insert " -->"))))

将其绑定到xml-mode钩子中的任何键...

于 2013-06-10T16:49:41.773 回答