Привет, коллеги. Как распечатать набранный в Вим текст на принтере? Да, это бывает нужно не так часто, но бывает нужно.
Один способ мы уже обсуждали: можно сконвертировать текст в HTML и потом распечатать из браузера. Но есть и прямой способ: команда :hardcopy. Она конвертирует текст к Постскрипт (а на MS Windows посылает на системный принтер), ну а его потом можно распечатать без проблем. Если принтер постскриптовый, то вообще легко, а если нет, то все равно есть чем распечатать ps, как правило, а еще можно переделать в PDF.
Как обычно, можно указать диапазон строк, а по умолчанию печатается весь файл. Постскрипт создается во временном файле, имя которого доступно в переменной v:fname_in, но вы можете перенаправить вывод куда вам угодно, поставив обычное перенаправление после команды:
:hardcopy > file.ps
Как и с HTML, показывается процент проделанной работы.
Предусмотрен ряд опций для управления результатом.
printencoding задает кодировку. По умолчанию используется encoding, которая обычно utf8. Для русского языка надо задавать 8-битную кодировку. У меня по какой-то причине русский текст в UTF8 в PostScript не читается: то ли юникодных символов нет, то ли еще почему — не знаю. Задал кодировку (printencoding) cp1251 — все нормально. Эта опция задается один раз глобально, а не при каждой печати (хотя никто не мешает, конечно).
printfont задает шрифт. По умолчанию courier. Какие доступны — не спрашивайте. На самом деле, для печати в постскрипт доступен только курьер. Можно добавить :h14, где 14 — размер шрифта. По умолчанию размер 10. Вот это важно. А гарнитура и не нужна, курьер сойдет, все равно серьезная работа со шрифтами идет не в Вим.
printheader задает заголовок. Формат такой же, как у statusline, то есть можно задавать текст и поля через знак %: поля заменяются той или иной информацией. Это может быть имя файла, номер строки или страницы, любая опция, и т.п. См. подробности в заметке про информационную строку statusline.
Есть пара опцией для задания множества символов и шрифта для вывода иероглифики. Я темой не владею — если интересно и нужно, читайте справку Вим.
printoptions — список опций в виде A:B через запятую, определяет формат печати. Там все, что мы обычно задаем в системном диалоге вывода на печать. Я не буду перечислять все, потому что редко когда вот прямо из Вим придется посылать материал на принтер. Надо создать постскрипт, а уж его распечатать через системный диалог, так ведь?
По умолчанию опция пуста, что означает значения по умолчанию. Может содержать, в числе прочего:
left:nn — поле слева (10pc)
right:nn — поле справа (5pc)
top:nn — поле сверху (5pc)
bottom:nn — поле снизу (5pc)
Вместо nn идет число и за ним in если в дюймах, pt для пунктов (пункт — это 1/72 дюйма), mm для миллиметров и pc для процентов от ширины или высоты листа. Единицу измерения можно опустить, тогда будет единица по умолчанию (процент).
header:nn — задает число строк на заголовок. Здесь nn — просто число. Если 0, то заголовка не будет. Заголовок всегда в первой строке, остальные просто пустые. По умолчанию 2.
syntax:yn — включить или выключить разметку синтаксиса. Вместо yn ставим либо y (это да), либо n (нет), либо a (это по умолчанию и означает "да, если принтер может печатать цвет или оттенки серого"). Постскрипт, видимо, всегда может.
number:yn — включать ли номера строк. По умолчанию n.
wrap:yn — сворачивать ли длинные строки. По умолчанию y.
portrait:yn — ориентация бумаги.
paper:A4 — размер бумаги. Возможны такие варианты:
10x14 — это название формата. Но также и размер в дюймах (25.4x35.57 в см)
A3 — понятно, 29.7x42 в дюймах или 11.69x16.54 в см.
A4 — самый распространенный формат бумаги, половина A3 (21x29.7, 8.27x11.69).
A5 — половина А4 (14.8x21, 5.83x8.27)
B4 — размер 25x35.3 или 10.12x14.33 в см
B5 — размер 17.6x25 или 7.17x10.12 в см
Еще варианты executive, folio, ledger, legal, letter, quarto, statement, tabloid. Размеры смотрите в Интернете или Справке.
Сам Постскрипт является текстовым файлом: это программа на языке программирования Постскрипт, который, вообще-то, Тьюринг-полный, так что на нем можно что угодно написать. Но обычно программа просто описывает рисунок. Если этот язык знать хоть немного, то иногда можно даже что-то понять, а порой даже подправить. В случае печати из Вим понять можно немного больше, чем в общем случае, потому что в основном выводится тот же текст, что в Виме. В служебной "шапке" вполне могут быть имя файла с полным путем и login пользователя, что не всегда удобно. Если хотите конфиденциально послать что-то кому-то, имейте это в виду.
Удачи, коллеги!