Может в Emacs повторно отступ большой кусок HTML-кода для меня?
при редактировании HTML в emacs, есть ли способ автоматически довольно форматировать blob разметки, изменяя что-то вроде этого:
<table>
<tr>
<td>blah</td></tr></table>
...в это:
<table>
<tr>
<td>
blah
</td>
</tr>
</table>
10 ответов:
по умолчанию, когда вы заходите на
.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
все это, как говорится, вы, вероятно, придется использовать что-то вроде порядок чтобы переформатировать ваш пример 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)
C-M-q
Переиндентировать все строки в пределах одной скобочной группировки (отступ-sexp).
C-M -\
Переиндентировать все линии в регионе (отступ-регион).
Я сам написал функцию, чтобы сделать это для 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))))
вы можете сделать заменить регулярное выражение
M-x replace-regexp \(</[^>]+>\) C-q-j
отступ всего буфера
C-x h M-x indent-region
порядок может делать то, что вы хотите, но только для всего буфера кажется (и результат XHTML)
M-x tidy-buffer
этот вопрос довольно старый, но я не был очень доволен различными ответами. Простой способ повторного отступа HTML-файла, учитывая, что вы используете относительно новую версию emacs (я запускаю 24.4.1), заключается в следующем:
- откройте файл в emacs
- отметьте весь файл с
C-x h
(Примечание: Если вы хотите увидеть, что помечается, добавьте(setq transient-mark-mode t)
на.emacs
file)- выполнить
M-x indent-region
что приятно об этом методе заключается в том, что он не требует никаких плагинов (предложение Конвея), он не требует замены regexp (предложение nevcx), а также не требует переключения режимов (предложение jfm3). Предложение Джея находится в правильном направлении-в общем, выполнение
C-M-q
будет отступ в соответствии с правилами режима - например,C-M-q
работает, по моему опыту, вjs-mode
и в некоторых других режимах. Но ниhtml-mode
, ниnxml-mode
не похоже, чтобы реализоватьC-M-q
.
вы можете передать область в xmllint (если она у вас есть) с помощью:
M-| Shell command on region: xmllint --format -
результат будет в конечном итоге в новый буфер.
Я делаю это с XML, и это работает, хотя я считаю, что xmllint нужны некоторые другие параметры для работы с HTML или другими неидеальными XML. nxml-режим покажет вам, если у вас есть хорошо сформированный документ.
в emacs 25, который я в настоящее время строю из исходного кода, предполагая, что вы находитесь в режиме HTML, используйте
Ctrl - x
hвыбрать все, а затем нажмите клавишу Tab.
самый простой способ сделать это через командную строку.
- убедитесь, что вы аккуратно установили
- тип
tidy -i -m <<file_name>>
отметим, что
-m
опция заменяет новый очищенный файл на старый. Если вы не хотите этого, вы можете ввестиtidy -i -o <<tidied_file_name>> <<untidied_file_name>>
The
-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
в командной строке.