Редактирование fb2 в редакторе vim

Обновлено: 2008-08-13

Для редактирования файлов в формате fb2 в vim полезно сделать следующие настройки в ~/.vimrc:

function FB2Options()
        setlocal formatoptions=
        " Чтобы видеть неразрывные пробелы:
        setlocal listchars=nbsp:~
        setlocal list
        " Валидация FB2 клавишей F9.
        setlocal makeprg=xmllint\ --nonet\ --noout\ --schema\ ~/SCHEMA2.1/FictionBook2.1.xsd\ "%"\ 2>&1\ \\\|\
                \ sed\ s,{http://www.gribuser.ru/xml/fictionbook/2.0},,g
        setlocal errorformat=%E%f:%l:\ parser\ error\ :\ %m,%-Z%p^,%-C%.%#,
                \%E%f:%l:\ error\ :\ %m,
                \%W%f:%l:\ warning\ :\ %m,
                \%E%f:%l:\ validity\ error\ :\ %m,
                \%W%f:%l:\ validity\ warning\ :\ %m,
                \%-Z%p^,
                \%f:%l:\ element\ %.%#:\ Schemas\ validity\ error\ :\ %m,
                \%-G%.%#
        nmap <buffer> <F9> :w<CR>:make<CR>
        imap <buffer> <F9> <ESC>:w<CR>:make<CR>
        " Ввод длинного как "--" (два тире подряд).
        imap <buffer> -- <C-K>-N
        " Ввод открывающей и закрывающей кавычки-ёлочки как "' и "" соответственно.
        imap <buffer> <Char-0x22>' <C-K><<
        imap <buffer> <Char-0x22><Char-0x22> <C-K>>>
        " Ввод многоточия как "..." (три точки подряд).
        digraph ., 8230
        imap <buffer> ... <C-K>.,
        " Ввод открывающей и закрывающей кавычки-лапки как '' и '" соответственно.
        imap <buffer> '' <C-K>:9
        imap <buffer> '<Char-0x22> <C-K><Char-0x22>6
        " Ввод неразрывного пробела как "  " (два пробела подряд).
        imap <buffer> <Char-0x20><Char-0x20> <C-K>NS
        " Ввод апострофа как `.
        imap <buffer> ` <C-K>'9
        " Добавление ударения к букве:
        nmap <buffer> _a a<C-R>=nr2char(0x301)<CR><ESC>
        nmap <buffer> _ф _a
        " Разрыв абзаца (_p)
        nmap <buffer> _p d1h:if @" != " "<CR>execute "normal ul"<CR>endif<CR>i</p><CR><p><ESC>
        nmap <buffer> _з _p
        " Слияние двух абзацев (_P)
        nmap <buffer> _P ^/\c<\/p><CR>4s<DELETE> <ESC>l3x:if tolower(@") != "<p>"<CR>execute "normal u"<CR>endif<CR><CR>
        nmap <buffer> _З _P
        " Заключение текста в emphasis и strong (_e, _s).
        vmap <buffer> _e c<emphasis><C-R>*</emphasis><ESC>
        vmap <buffer> _у _e
        vmap <buffer> _s c<strong><C-R>*</strong><ESC>
        vmap <buffer> _ы _s
        " Подсветка букв с ударениями
        highlight HlAccent ctermbg=yellow guibg=yellow
        match HlAccent /\%u301/
        " Разбивка b64-картинки на строки по 60 символов (_b)
        nmap <buffer> _b :/<binary\s/,/<\/binary>/s,\c[0-9a-z\/+]\{60\},&<C-V><CR>,g<BAR>:noh<CR>
endfunction
autocmd BufRead *.fb2 call FB2Options()

Ну и некоторые общие настройки:

set encoding=utf8
set fileencodings=utf8,cp1251
set termencoding=utf8
set incsearch
set hlsearch
set guioptions-=T
set showcmd
set autowrite
set mouse=a
set scrolloff=3
" Избавляемся от необходимости переключать раскладку клавиатуры при
" редактировании текстов на русском языке
map ё `
map й q
map ц w
map у e
map к r
map е t
map н y
map г u
map ш i
map щ o
map з p
map х [
map ъ ]
map ф a
map ы s
map в d
map а f
map п g
map р h
map о j
map л k
map д l
map ж ;
map э '
map я z
map ч x
map с c
map м v
map и b
map т n
map ь m
map б ,
map ю .
map Ё ~
map Й Q
map Ц W
map У E
map К R
map Е T
map Н Y
map Г U
map Ш I
map Щ O
map З P
map Х {
map Ъ }
map Ф A
map Ы S
map В D
map А F
map П G
map Р H
map О J
map Л K
map Д L
map Ж :
map Э "
map Я Z
map Ч X
map С C
map М V
map И B
map Т N
map Ь M
map Б <
map Ю >
nmap пп gg
nmap <TAB> g~iw

Комментарии

Немного не по теме..
Может быть знаете консольный конвертор в fb2 из sgml?

forfreeuse написал:
Может быть знаете консольный конвертор в fb2 из sgml?

В xml - есть:
sgml2xml - convert SGML to XML
В fb2 - не знаю.

ground0 написал:
forfreeuse написал:
Может быть знаете консольный конвертор в fb2 из sgml?

В xml - есть:
sgml2xml - convert SGML to XML
В fb2 - не знаю.

это linuxdoc, который sgml конвертирует в разные форматы, думал уже дописать его, для поддержки fb2, но не нашёл в fb2 некоторых возможностей.
Может быть есть в fb2 понятие преформатарованного текста?
Например, в документации есть схема сети, нарисованная минусами, подчёркиваниями и прочими символами. Каждый пробел имеет значение..
Как такую схему оформить в fb2?

forfreeuse написал:
Может быть есть в fb2 понятие преформатарованного текста?

Насколько я знаю, нет.
forfreeuse написал:
Например, в документации есть схема сети, нарисованная минусами, подчёркиваниями и прочими символами. Каждый пробел имеет значение..
Как такую схему оформить в fb2?

Картинками. Или, может быть, таблицами (новая фича фб2.1 и фб2.2), но их ещё мало какой вьюер понимает.
Но вообще странная идея, зачем документацию в фб2? Формат вообще-то предназначен в первую очередь для художественной лит-ры.

ground0 написал:

Но вообще странная идея, зачем документацию в фб2? Формат вообще-то предназначен в первую очередь для художественной лит-ры.

Что бы комфортно читать документацию с экрана ебука.
Что бы было оглавление(на eink много тратится времени на листание и найти нужную главу без оглавления сложно).
Что бы бы ридер равномерно располагал текст по экрану, расставляя переносы в крайних правых словах строки.
Что бы не было проблем с изменением размера шрифта.

fb2 почти идеально подходит, плюс он открытый, легко редактируемый итд.

ground0 написал:

Или, может быть, таблицами (новая фича фб2.1 и фб2.2)

Подскажите пожалуйста, где можно про них почитать?

forfreeuse написал:
Подскажите пожалуйста, где можно про них почитать?

На fictionbook.org, вероятно.

Цитата:
Может быть есть в fb2 понятие преформатарованного текста?
Например, в документации есть схема сети, нарисованная минусами, подчёркиваниями и прочими символами. Каждый пробел имеет значение..
Как такую схему оформить в fb2?

Я думаю, можно реализовать такое просто моноширным шрифтом (тег <code>). Здавствуй, ASCII-графика :)

Дополняю: при редактировании книг в кодировке UTF8 на не-юникод системе скорее всего будут потеряны отсутствующие в системной кодировке символы.

Anarchist написал:
Дополняю: при редактировании книг в кодировке UTF8 на не-юникод системе скорее всего будут потеряны отсутствующие в системной кодировке символы.

*BSD?

При чём тут *BSD?
Намёк на то, что FreeBSD (Open/Net, полагаю - тоже) невозможно полностью локализовать в UTF8?
Нет. На FreeBSD я редактировать не пробовал.

Linux 2.6.22-gentoo-r9
Просто исторически так сложилось, что я предпочитаю локаль KOI8-R (кстати, меня мягко говоря не радует тот факт, что Lbook V.3 не допускает мысли о возможности существования русскоязычных текстовых файлов в кодировке отличной от СР1251).

Anarchist написал:
(кстати, меня мягко говоря не радует тот факт, что Lbook V.3 не допускает мысли о возможности существования русскоязычных текстовых файлов в кодировке отличной от СР1251).

Ээээ.... Вы уверены (что не допускает, естественно) ? Ссылочку не кинете ?
X