Всем привет! У Вима есть такая возможность: конвертировать текст в формат HTML. С учетом того, что текст можно форматировать и присутствует подсветка синтаксиса (для ТеХ и языков программирования), это может быть полезно. Например, если Вы хотите код выложить в Интернет. Или просто поделиться кодом, чтобы коллеги посмотрели его где угодно, хоть с пылесоса. А с учетом возможности перехода по номерам строк и использования фолдов (в браузере!), получается и вовсе любопытно. Например, можно выложить в интернет мануал или документацию...
Конечно, с современным облачными сервисами это все уже не так актуально, но может быть полезно, так что информирую о возможности, а там смотрите.
Во-первых, есть скрипт 2html.vim, который лежит там же, где и скрипты для раскраски синтаксиса: в $VIMRUNTIME/syntax. И можно его вызвать, как обычный скрипт, через :source. Откроется новое окошко и в нем будет создан html-текст, в точности воспроизводящий содержимое окна, из которого скрипт вызван.
Но есть способ удобнее: команда :TOhtml, которой можно указать диапазон строк (по умолчанию весь файл) и которая может, например, сохранить выдачу vimdiff (два окна с подсветкой различий). По сути-то команда вызывает 2html, но она удобнее.
Теперь переменные, которые управляют конвертацией. Я опишу не все, см. :help TOhtml.
g:html_no_progress
Если нуль (по умолчанию), то в строке информации указывается доля проделанной работы. На современных компьютерах, пожалуй, неактуально, разве что вы уж очень большие и сложные файлы конвертируете. Но если тормозит - выставьте в единичку.
g:html_number_lines
Определяет, надо ли нумеровать строки в HTML. По умолчанию определяется флагом numbers, то есть будет как в Вим, так и в HTML. Но можно переопределить вручную. Если хотите вернуться к автоматике, скиньте переменную: :unlet g:html_number_lines
Пример на скриншоте выше.
g:html_line_ids
Позволяет переходить по строкам в браузере, добавляя номера строк к URL через решетку. Используется Javascript. Если выставлена в 1 (по умолчанию, если стоит g:html_number_lines), то L666 или просто 666 после решетки в конце URL перейдет на нужную строчку.
Если сконвертировано сравнение файлов, то адрес чуть сложнее: W1L666, то есть указано еще и окно.
Пример на скриншоте выше.
g:html_use_css
Если нуль, отключает форматирование в стиле HTML 4.01 с использованием CSS. Будут использованы старые средства. Нужна, если HTML будет использован с чем-то очень старым.
g:html_use_xhtml
Если 1, то создает XHTML 1.0. Если 0 (по умолчанию), то HTML 4.01.
g:html_pre_wrap
Переменная определяется флагом wrap и, если 0, то текст не переносится (уходит за край). Если 1, то строки сворачиваются по правилам CSS 2.0 (в частности, по пробелам). Можно выставить переменную, превозмогая wrap, а чтобы вернуться к автоматике, сделайте :unlet.
g:html_ignore_conceal
Если 1, то игнорируется замена текста символами. Это полезно для ТеХ. Вы можете включить возможность заменять, например, \lambda на λ, и статья выглядит посимпатичнее. При сохранении в HTML по умолчанию пойдет λ, но вы можете выставить данную переменную в 1 и тогда туда пойдет оригинальный ТеХ-текст.
В правилах подсветки синтаксиса можно указать не только каким цветом раскрашивать тот или иной текст, но и задать замену текста символом или пробелом (скрытие текста).
Важно! Замена только на экране, файл не меняется. Более того, если поместить курсор на заменяющий символ, вы увидите заменяемый текст.
g:html_ignore_folding
Если 0 (по умолчанию), то свернутый в фолд текст будет изображен в HTML свернутым. Есть возможность сделать фолд разворачиваемым, о чем далее. Но можно и не делать, скрыв что-то ценное, например. Или, если речь о различиях, фолд скрывает идентичный текст, который и не нужен, если речь идет о различиях.
Если 1, то в HTML будет весь текст, фолды игнорируются.
g:html_dynamic_folds
Если 0 (по умолчанию), то текст свернутого фолда в HTML вообще отсутствует - только первая строка. Если же 1, то фолд открывается. При этом игнорируется g:html_use_css. Сама переменная имеет смысл только если g:html_ignore_folding выставлена в 0, то есть фолдинг не игнориуется.
g:html_no_foldcolumn
Указывает, делать ли слева столбик, в котором показаны фолды. По умолчанию 0, что означает "делать". Туда можно щелкать мышкой, открывя и закрывая фолды (если это можно, конечно). Если 1, то столбца нет, а фолд открывается, если навести на него курсор.
g:html_hover_unfold
Если 0 (по умолчанию), то открыть открываемый фолд можно, только кликнув по плюсику в столбце слева. Если 1, то CSS2.0 используется для автоматического раскрытия при проходе курсора мыши над фолдом. Не используется JS.
g:html_prevent_copy
Описывает текст, который не копируется. Это нужно не для того, чтобы затруднить плагиат, а для другой цели: можно указать, какой текст копируется, а какой нет. Тогда можно скопировать только код, а номера строк и прочую служебную информацию не копировать.
Содержит нуль или более символов:
- f: не копировать столбец фолдов.
- n: не копировать номера строк.
- t: не копировать текст фолда.
- d: не копировать отсутствующие строки при сравнении файлов.
g:html_diff_one_file
Влияет только на конвертацию сравнения различий. Если равна нулю (по умолчанию), то конвертируются оба окна; если единице - то только текущее.
g:html_whole_filler
Влияет только на конвертацию сравнения различий. Если в одном окне есть строки, которых нет в другом, то в этом другом вставляются пустые и отмечаются синеньким. Если переменная нуль, то отрисуются только три строки (если их больше двух), на средней указано число строк. Если единичка, отрисуются все, сколько их есть.
g:html_use_encoding
Позволяет задать кодировку явно. Например,
:let g:html_use_encoding = "UTF-8"
Рекомендуется задавать эту переменную, если HTML предназначен для web-сервера, не полагаясь на алгоритмы Вим. Смотрите сами.
g:html_font*
Задает шрифт. по умолчанию "monospace". Можно задать список шрифтов:
:let g:html_font = ["DejaVu Sans Mono", "Consolas"]
Удачи, коллеги!