Сразу хочу отметить, что для работы в vim я использую темную цветовую схему с прозрачным фоном на основе схемы xterm16. Эта схема не годится для текста с белым фоном, который я использую в блоге. Поэтому для создания HTML кода я временно переключаюсь на светлую цветовую схему. Для этого я выбрал схему lucius (которая недавно обновилась до версии 8.1) с соответствующими настройками, которые также показаны в следующем коде.
229 " ---- lucius colorscheme settings and command MakeBlogArticle 230 " ---- 231 let g:lucius_style = 'light' 232 let g:lucius_contrast = 'high' 233 let g:lucius_contrast_bg = 'high' 234 235 fun! <SID>make_blog_article(prepare_for_insertion, line1, line2) 236 let colors = g:colors_name 237 colorscheme lucius 238 let g:html_use_css = 0 239 exe a:line1.",".a:line2."TOhtml" 240 unlet g:html_use_css 241 exe "colorscheme ".colors 242 setlocal nowrap 243 if a:prepare_for_insertion 244 1;/^<font face=/-1d 245 1s/.*/<pre><tt>/ 246 silent $;?^</font?+1d 247 $s/.*/<\/tt><\/pre>/ 248 %s/<br>$// 249 if getline(2) =~ '^[[:blank:]]*$' 250 2;/[^[:blank:]]\+/-1d 251 endif 252 if getline(line('$') - 1) =~ '^[[:blank:]]*$' 253 silent $-1;?[^[:blank:]]\+?+1d 254 endif 255 normal ggJx0 256 endif 257 endfun 258 259 command -range=% MakeBlogArticle 260 \ silent call <SID>make_blog_article(1, <line1>, <line2>)В строках 231-233 находятся настройки цветовой схемы lucius. В строках 259-260 определена команда MakeBlogArticle, которая выполняет всю работу с помощью вызова функции make_blog_article(). Команда MakeBlogArticle может выполнять подсветку как для всего кода в буфере, так и внутри отдельной выделенной области. Для этого в функцию make_blog_article() передаются два аргумента line1 и line2, которые соответствуют номерам строк, ограничивающих выделенную область. Еще один аргумент prepare_for_insertion указывает на то, что код, сгенерированный командой TOhtml нужно будет преобразовать для вставки в блог (заменить HTML хедер и футер на теги <pre><tt> и </tt></pre> соотвественно, удалить теги <br> и т.п.).
В строках 235-257 находится тело функции make_blog_article(). Разберемся, что же в ней происходит. Строки 236-237: запоминаем текущую цветовую схему и переключаемся на новую. Строки 239-241: выполняем команду TOhtml в переданном диапазоне, определяемом аргументами line1 и line2. По умолчанию в TOhtml используется CSS, для вставки в блог это не годится, поэтому мы определяем равной нулю специальную переменную g:html_use_css перед самым вызовом TOhtml, а затем удаляем ее. В строке 241 переключаемся на исходную цветовую схему. После вызова TOhtml курсор находится в новом буфере с HTML кодом. В строке 242 указываем, что vim не следует переносить длинные строки при достижении границы видимой области (это дело вкуса, но в данном случае мне удобнее, когда длинные строки не переносятся).
В строках 243-256 происходит подготовка сгенерированного HTML кода для вставки в блог. В строке 244 переходим на первую строку в буфере и удаляем все строки вплоть до первого вхождения ^<font face= (после него начинается полезный код). В строке 245 заменяем первую строку (которой теперь оказалась строка с первым вхождением ^<font face=) на <pre><tt>. Таким образом, мы заменили HTML хедер на <pre><tt>. В строках 246-247 производится аналогичная замена HTML футера на </tt></pre>. В строке 248 удаляем все переносы строк <br>: при использовании тега <pre> они не нужны. Далее идут в принципе необязательные изменения, настраивающие отступы впереди и в конце сгенерированного HTML кода. В строках 249-254 удаляем все пустые строки в буфере после первой строки и перед последней строкой. В строке 255 переводим курсор на первую строку буфера и соединяем ее со второй строкой.
Теперь остается выделить все строки в буфере и вставить их в редактируемое поле в блоге в режиме верстки HTML.
Кстати я не уверен, что замена HTML хедера и футера на <pre><tt> и </tt></pre> является оптимальным решением, но в моем случае она работает.
Комментариев нет:
Отправить комментарий