vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner

Обнаружил сущестование в vim таких полезных событий для автокоманд как BufReadCmd и BufWriteCmd.

В результате теперь у меня получилось сделать плагин (который лежит в ~/.vim/plugin/fossilwiki.vim)

и умеет открывать и сохранять странички по именам вида wiki://Название.

При этом, если страничка была открыта через этот плагин, на ,l назначается команда превращения текущего слова/выделенного текста в маркдауновскую ссылку, а если нет, то нет.

Осталось повесить на <Enter> переход по такой ссылке (уже имеющейся в тексте) и, пожалуй уже можно будет хвастаться в фоссиловской рассылке. Здесь я как-то пока не соображу, как определить текующую позицию курсора, и как от неё искать границы ссылки.

Текст плагина пока такой:

augroup fossilwiki
au! * wiki://*
au BufReadCmd wiki://* let s:page=shellescape("< amatch>:t")
\ |exe "r !fossil wiki export ".s:page
\ . "\|\| fossil wiki create ".s:page." /dev/null"
\ | :%s/^M$//e
\ | set filetype=markdown |doau BufReadPost
au BufReadPost wiki://* :map < buffer> ,l lbcw[< Esc>pa](wiki?name=< Esc>pa)< Esc>
au BufReadPost wiki://* :vmap < buffer> ,l da[< Esc>pa](wiki?name=< Esc>
\:let @@=substitute(@@,' ','+','g')< CR>pa)< Esc>
au BufWriteCmd wiki://* exe "w !fossil wiki commit "
\.  shellescape("< amatch>:t") . " -M text/x-markdown"
\| set nomodified
augroup end

(бэкслеш с начале строки это признак продолжения команды с предыдущей строки. Чтобы не было слишком длинных строк.)

И еще тут есть один грязный хак, который унаследован от шелловского скрипта, использовавшегося раньше - если страница не существует, она создается (пустая) в момент чтения. Возможно, правильнее было бы заводить buffer-local переменную, которая бы содержала слово create если страницы не существует, и слово commit, если существует. Но это я еще не разобрался с неймспейсами в vim.

P.S. А чтобы дримвидсовский конвертер маркдауна не принимал вимовские токены в угловых скобках за незакрытые html-тэги, пришлось везде после < пробелов навставлять, так как почему-то &lt; он понимает в обычном тексте, но не в преформаттед блоке. А на тэги ругается и в нём тоже.

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

June 2025

S M T W T F S
1 23 4 56 7
89 1011 12 1314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 13th, 2025 11:10 am
Powered by Dreamwidth Studios