Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет ДО ([info]do_) в [info]vim_ljr
@ 2005-12-22 22:08:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Генерация цветовой подсветки синтаксиса для LJ
..как известно, vim умеет генерить HTML-код для цветовой подсветки синтаксиса таким образом, что на итоговой страничке он выглядит так же, как в окне редактора. Всё бы хорошо, да вот незадача -- цвет фона и дефолтный цвет шрифа забиваются в атрибуты тэга <body>, и при копировании данного куска кода в LJ-пост эти цвета пропадают, что приводит порой к довольно неудобоваримым последствиям, если цвет фона редактора и цвет фона журнала не совпадают.

Предлагаю небольшую функцию, которая решает данную проблему.


fun! MyToHtml(line1, line2)
        exec a:line1.','.a:line2.'TOhtml'
        %g/<body/normal k$dgg
        %s/<body\s*\(bgcolor="\#[a-f0-9]\{6\}"\)\s*text=\("\#[a-f0-9]\{6\}"\)\s*>/<table><tr><td \1><font color=\2>/
        %s#</body>\(.\|\n\)*</html>#</font></td></tr></table>#i
endf

command -range=% MyToHtml :call MyToHtml(<line1>,<line2>)



Теперь выделяете нужный кусок кода, и набираете :MyToHtml

Ну, если ничего не выделить, то сгенерится страничка для всего буфера, само собой ;-/


..а вот тот же кусок кода, сгенерённый TOhtml без всякой дополнительной обработки, для сравнения:




fun! MyToHtml(line1, line2)
        exec a:line1.','.a:line2.'TOhtml'
        %g/<body/normal k$dgg
        %s/<body\s*\(bgcolor="\#[a-f0-9]\{6\}"\)\s*text=\("\#[a-f0-9]\{6\}"\)\s*>/<table><tr><td \1><font color=\2>/
        %s#</body>\(.\|\n\)*</html>#</font></td></tr></table>#i
endf

command -range=% MyToHtml :call MyToHtml(<line1>,<line2>)




я думаю, разница налицо ;-/


(Добавить комментарий)


[info]a1exsus.livejournal.com
2005-12-27 00:08 (ссылка)
Прикольно, только можно для тех, кто vim-oм только конфиги правит и т.п. мелочи делает:
1.Нужен специальная vim или стандартный-портовый сойдёт?
bash-2.05b$ vim --version
VIM - Vi IMproved 6.3 (2004 June 7, compiled Dec 21 2005 13:55:47)
2.Куда прописывать данную функцию?
Ещё раз извиняюсь, если мои вопросы показались вам глупыми.
P.S. Ссылки на соответствующую документацию принимаются.

(Ответить) (Ветвь дискуссии)


[info]do_
2005-12-27 07:35 (ссылка)
1.Нужен специальная vim или стандартный-портовый сойдёт?
bash-2.05b$ vim --version
VIM - Vi IMproved 6.3 (2004 June 7, compiled Dec 21 2005 13:55:47)


често говоря, у вас вывод версии какой-то не очень verbose. У меня аж вот сколько всего:
$ vim --version
VIM - Vi IMproved 6.4 (2005 Oct 15, compiled Oct 21 2005 13:43:01)
Compiled by corinna@cathi
Normal version without GUI.  Features included (+) or not (-):
-arabic +autocmd -balloon_eval -browse +builtin_terms +byte_offset +cindent
-clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
+cryptv -cscope +dialog_con +diff +digraphs -dnd -ebcdic -emacs_tags +eval
+ex_extra +extra_search -farsi +file_in_path +find_in_path +folding -footer
+fork() +gettext -hangul_input +iconv +insert_expand +jumplist -keymap -langmap
 +libcall +linebreak +lispindent +listcmds +localmap +menu +mksession
+modify_fname +mouse -mouseshape -mouse_dec -mouse_gpm -mouse_jsbterm
-mouse_netterm +mouse_xterm +multi_byte +multi_lang -netbeans_intg -osfiletype
+path_extra -perl +postscript +printer -python +quickfix -rightleft -ruby
+scrollbind -signs +smartindent -sniff +statusline -sun_workshop +syntax
+tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse
+textobjects +title -toolbar +user_commands +vertsplit +virtualedit +visual
+visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup
-X11 -xfontset -xim -xsmp -xterm_clipboard -xterm_save
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H     -g -O2
Linking:
gcc   -L/usr/local/lib -o vim.exe       -lncurses  -liconv -lintl


из принципиальных, тут, думаю, только +syntax да +eval.

Но мне кажется, что всё же порт должен содержать достаточное количество фич.

И ещё -- для генерации HTML лучше использовать gui-версию, поскольку консольная неточно генерит цвета, о чём даже написано в хелпе(:help TOhtml):


Remarks:
- This only works in a version with GUI support.  If the GUI is not actually
  running (possible for X11) it still works, but not very well (the colors
  may be wrong).



да и убедиться несложно:


colorscheme darkblue
let list_Ctags_Cmd='F:/cygwin/usr/bin/ctags'
set diffexpr=MyDiff()
function Uuid()
        return substitute( system('uuidgen'), "[^a-zA-Z0-9_-]", "", "g" )
endf




2.Куда прописывать данную функцию?

Я прописываю прямо в vimrc, поскольку такую маленькую функцию излишне в целый скрипт выделять, мне кажется ;-/
Можно прописать в общесистемный, который удобно находить командой :edit $VIM/vimrc, либо в $HOME/.vimrc

(Ответить) (Уровень выше)