首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >emacs可以为我重新缩进一大段HTML吗?

emacs可以为我重新缩进一大段HTML吗?
EN

Stack Overflow用户
提问于 2008-09-26 00:10:56
回答 6查看 31.3K关注 0票数 72

在emacs中编辑HTML时,有没有一种方法可以自动调整标记的格式,更改如下内容:

代码语言:javascript
复制
  <table>
  <tr>
<td>blah</td></tr></table>

...into此命令:

代码语言:javascript
复制
<table>
 <tr>
  <td>
   blah
  </td>
 </tr>
</table>
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-28 01:22:01

默认情况下,当您在Emacs (22或23)中访问.html文件时,它会将您置于html-mode中。这可能不是您想要的。你可能想要nxml-mode,这是非常花哨的。nxml-mode似乎只随Emacs 23一起提供,尽管您可以从nXML web site下载用于早期版本的emacs。还有一个名为nxml-mode的Debian和Ubuntu包。您可以使用以下命令输入nxml-mode

代码语言:javascript
复制
M-x nxml-mode

您可以使用以下命令查看nxml模式文档:

代码语言:javascript
复制
C-h i g (nxml-mode) RET

话虽如此,您可能不得不使用诸如Tidy之类的东西来重新格式化您的xhtml示例。nxml-mode会让你从

代码语言:javascript
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head></head>
<body>
<table>
  <tr>
<td>blah</td></tr></table>
</body>

代码语言:javascript
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head></head>
  <body>
    <table>
      <tr>
    <td>blah</td></tr></table>
</body>
</html>

但是我没有看到一个更通用的工具来在某些xml标记上进行您想要的换行。请注意,C-j将插入一个具有适当缩进的新行,因此您可以执行一个快速宏或修改一个defun来处理您的表。

票数 30
EN

Stack Overflow用户

发布于 2011-06-06 11:47:26

您可以在相同的区域/缓冲区上执行sgml-pretty-print,然后再执行indent-for-tab,前提是您处于html模式或nxml模式。

sgml-pretty-print会在适当的位置添加新行,而indent-for-tab会添加漂亮的缩进。它们共同导致了正确格式化的html/xml。

票数 108
EN

Stack Overflow用户

发布于 2011-06-07 00:56:07

我自己为xml编写了一个函数,它在nxml模式下工作得很好。对html来说也应该工作得很好:

代码语言:javascript
复制
(defun jta-reformat-xml ()
  "Reformats xml to make it readable (respects current selection)."
  (interactive)
  (save-excursion
    (let ((beg (point-min))
          (end (point-max)))
      (if (and mark-active transient-mark-mode)
          (progn
            (setq beg (min (point) (mark)))
            (setq end (max (point) (mark))))
        (widen))
      (setq end (copy-marker end t))
      (goto-char beg)
      (while (re-search-forward ">\\s-*<" end t)
        (replace-match ">\n<" t t))
      (goto-char beg)
      (indent-region beg end nil))))
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/137043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档