5

XML ファイルがあります。emacs 23.2 では nxml モードで開きます。

comment-region領域内の各行にコメントするのではなく、領域をブロックとしてコメントしたいと考えています。私の意見では、コメントセクションが読みやすくなります。

前:

ここに画像の説明を入力

「コメント領域」の後:

ここに画像の説明を入力

望ましい後:

ここに画像の説明を入力

JavaScript や Java などの中かっこ言語では、コメント領域は各行にコメントを付けますが、これは問題ないと思います。1 行のコメント プレフィックスを使用しているため、//次の内容が読みやすくなっています。XMLの場合は、別のものにしたいと思います。


編集

C モードの同様の質問に関する Trey の古い回答を見たところです: Cモードの Emacs コメント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

それは次のようなものかもしれません:

(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 に答える