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

时间:2020-03-06 14:45:31  来源:igfitidea点击:

在emacs中编辑HTML时,有一种方法可以自动对标记的blob进行漂亮的格式设置,并进行如下更改:

<table>
  <tr>
<td>blah</td></tr></table>

...变成这样:

<table>
 <tr>
  <td>
   blah
  </td>
 </tr>
</table>

解决方案

http://www.delorie.com/gnu/docs/emacs/emacs_277.html

选择要修复的区域后。 (要选择整个缓冲区,请使用C-x h)

C-M-q
  
  Reindent all the lines within one parenthetical grouping(indent-sexp).
  
  C-M-\
  
  Reindent all lines in the region (indent-region).

Tidy可以做我们想做的事,但似乎只对整个缓冲区起作用(结果是XHTML)

M-x tidy-buffer

默认情况下,当我们在Emacs中访问" .html"文件(22或者23)时,它将使我们进入" html-mode"。那可能不是我们想要的。我们可能需要nxml-mode,这是非常值得的。尽管我们可以从nXML网站上为emacs的早期版本下载它," nxml-mode"似乎仅随Emacs 23一起提供。还有一个名为nxml-mode的Debian和Ubuntu软件包。我们可以使用以下命令输入" nxml-mode":

M-x nxml-mode

我们可以使用以下方法查看nxml模式文档:

C-h i g (nxml-mode) RET

话虽如此,我们可能必须使用Tidy之类的格式来重新格式化xhtml示例。 nxml-mode

<!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>

<!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'。

我们可以执行替换正则表达式

M-x replace-regexp

 \(</[^>]+>\)

 C-q-j

缩进整个缓冲区

C-x h
 M-x indent-region