При редактировании HTML в emacs существует ли способ автоматически красиво отформатировать blob разметки, изменив что-то вроде этого:
<table>
<tr>
<td>blah</td></tr></table>
... в это:
<table>
<tr>
<td>
blah
</td>
</tr>
</table>
При редактировании HTML в emacs существует ли способ автоматически красиво отформатировать blob разметки, изменив что-то вроде этого:
<table>
<tr>
<td>blah</td></tr></table>
... в это:
<table>
<tr>
<td>
blah
</td>
</tr>
</table>
По умолчанию, когда вы посещаете файл .html
в Emacs (22 или 23), он поместит вас в html-mode
. Это, вероятно, не то, что вы хотите. Вы, вероятно, хотите nxml-mode
, что серьезно. nxml-mode
похоже, поставляется только с Emacs 23, хотя вы можете загрузить его для более ранних версий emacs с сайта nXML. Также есть пакет Debian и Ubuntu с именем nxml-mode
. Вы можете ввести 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
, который будет делать ваши таблицы.
Вы можете сделать sgml-pretty-print
, а затем indent-for-tab
в том же регионе/буфере, если вы находитесь в html-режиме или в nxml-режиме.
sgml-pretty-print
добавляет новые строки в нужные места, а indent-for-tab
добавляет хороший отступ. Вместе они ведут к правильно отформатированному html/xml.
http://www.delorie.com/gnu/docs/emacs/emacs_277.html
После выбора региона, который вы хотите исправить. (Чтобы выбрать весь буфер, используйте C-x h)
С-М-д
Повторите все строки внутри одной скобки (indent-sexp).
С-М -\
Повторите все строки в области (область отступа).
Я написал функцию самостоятельно, чтобы сделать это для xml, который хорошо работает в nxml-режиме. должен хорошо работать и для html:
(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))))
Вы можете выполнить замену regexp
M-x replace-regexp
\(</[^>]+>\)
\1C-q-j
Отступы весь буфер
C-x h
M-x indent-region
Tidy может делать то, что вы хотите, но только для всего буфера (и результат XHTML)
M-x tidy-buffer
Вы можете передать область в xmllint (если она есть), используя:
M-|
Shell command on region: xmllint --format -
Результат будет в новом буфере.
Я делаю это с XML, и он работает, хотя я считаю, что xmllint нуждается в некоторых других параметрах для работы с HTML или другим не совершенным XML. nxml-mode сообщит вам, есть ли у вас хорошо сформированный документ.
Этот вопрос довольно старый, но я не был доволен различными ответами. Простой способ перетаскивания HTML файла, учитывая, что вы используете относительно новую версию emacs (я запускаю 24.4.1):
C-x h
(обратите внимание: если вы хотите видеть, что помечено, добавьте (setq transient-mark-mode t)
в ваш .emacs
файл).M-x indent-region
Что приятно в этом методе, так это то, что он не требует никаких плагинов (предложение Conway), он не требует замены regexp (предложение nevcx) и не требует переключения режимов (предложение jfm3). Предложение Джей находится в правильном направлении - в общем случае выполнение C-M-q
будет отступ в соответствии с правилами режима - например, C-M-q
работает, по моему опыту, в js-mode
и в нескольких других режимах. Но ни html-mode
, ни nxml-mode
, похоже, не реализуют C-M-q
.
В emacs 25, который я сейчас создаю из исходного кода, если вы находитесь в режиме HTML, используйте
Ctrl - x
h
чтобы выбрать все, а затем нажмите Tab.
Самый простой способ сделать это - через командную строку.
tidy -i -m <<file_name>>
Обратите внимание, что параметр -m
заменяет новый готовый файл на старый. Если вы этого не хотите, вы можете ввести tidy -i -o <<tidied_file_name>> <<untidied_file_name>>
-i
предназначен для отступов. Кроме того, вы можете создать файл .tidyrc
с такими параметрами, как
indent: auto
indent-spaces: 2
wrap: 72
markup: yes
output-xml: no
input-xml: no
show-warnings: yes
numeric-entities: yes
quote-marks: yes
quote-nbsp: yes
quote-ampersand: no
break-before-br: no
uppercase-tags: no
uppercase-attributes: no
Таким образом, все, что вам нужно сделать, это ввести tidy -o <<tidied_file_name>> <<untidied_file_name>>
.
Для более простого типа man tidy
в командной строке.