vimwiki 0.5.2

2009-01-19 16:37; Tags: ,

Что новенького:

  • Добавил команды :VimwikiGoHome, :VimwikiTabGoHome и :VimwikiExploreHome.
  • Добавил маппинг <Leader>wt — откроет индексный файл в новом табе.
  • Добавил настройку g:vimwiki_gohome — меняет поведение команды :VimwikiGoHome. Подробнее в справке. (Спасибо Тимуру Зарипову).
  • Исправил команду :VimwikiRenameWord. Можно было потерять переименовываемый файл, если текущая директория отличалась от g:vimwiki_home.
  • Сделал команды :Wiki2HTML и :WikiAll2HTML доступными только для буферов c ft=vimwiki.
  • Ну и переименовал их в :Vimwiki2HTML и :VimwikiAll2HTML.

Загрузить можно, как обычно, с сайта vim’а или с сайта vimwiki.

vimwiki 0.5.1

2008-12-03 18:49; Tags: ,

В этот замечательный день, аккурат в день юриста, я забубенил новую версию.
Из нового:

  • Написал Help.
  • Сделал фолдинг для заголовков.
  • Добавил <Plug>VimwikiGoHome и <Plug>VimwikiExploreHome, чтоб их можно было нормально перебиндить.
  • Исправил парочку ошибок.

Загрузить можно с сайта vim’а (там и проголосовать можно) или с сайта vimwiki, где есть картинки, которые скриншоты.

PS
Юристы! С праздником!

vimwiki 0.5

2008-09-15 13:55; Tags: ,

Забубенил новую версию vimwiki под номером 0.5. Поправил несколько не критичных ошибок, думаю, что добавил немного новых — все как обычно.
Теперь можно добавлять разные Wiki-разметки. Я пока сделал гугловскую и MediaWiki. Правда, экспорт в HTML работает только для стандартной — vimwiki, что в будущем возможно изменится. :)

vim — дата изменения файла

2008-09-08 11:07; Tags: ,

Так случилось, что мне необходимо в некоторых файлах записывать дату их изменения (вот как здесь, например). До недавних пор использовал:

nmap <Leader>Id i<C-R>=strftime("%d.%m.%Y %H:%M")<CR><ESC>
nmap <Leader>id a<C-R>=strftime("%d.%m.%Y %H:%M")<CR><ESC>
vmap <Leader>id di<C-R>=strftime("%d.%m.%Y %H:%M")<CR><ESC>

Я находил старую дату — обычно где-то в самом начале файла — удалял ее и вставлял новую.
Делал так достаточно долго, хоть это было и не очень удобно. Пока не надоело:

function! LastChangeUpdate(...)
    if a:0 > 0
        let prefix = a:1
    else
        let prefix = ""
    endif
    let linenr = 1
    while linenr <= 10
        if getline(linenr)=~ "Last Change"
            call setline(linenr, prefix.'Last Change: '.strftime("%d.%m.%Y %H:%M"))
            break
        endif
        let linenr += 1
    endwhile
endfunction
"" Before _vimrc is saved, update 'Last Change' time if it is exists.
autocmd! bufwritepre $MYVIMRC call LastChangeUpdate('" ')
autocmd bufwritepre *.vim call LastChangeUpdate('" ')

Функция LastChangeUpdate тупо смотрит на первые 10 строк файла. Если находит ту, в которой есть Last Change, то заменяет ее на нужное нам — Last Change: текущая дата и время. Если в параметрах функции задана строка, то она подставляется перед Last Change, чтобы оформить как комментарий, например.
Ну и автокоманды — для vimrc и для всех vim-файлов перед записью вызывается наша функция и делает описанное выше.

vimwiki — дальше больше

2008-09-06 15:32; Tags: ,

Как-то внезапно люди стали присылать патчи для vimwiki, что конечно радует.
Думаю сделать возможным подключение разных вики синтаксисов (уже начал). Основная засада видится в обработке «сложных» вики-ссылок. Другая засада в самом коде — там местами такое написано, что стыдно становится. Тестов я не писал — посчитал не нужными, теперь, рефакторинг, вместо чего-то не сильно напряжного, превратится в «кашмар».
Посмотрим, что получится.

html omnicomplete

2008-08-19 13:05; Tags: ,

Читая группу vim_use, узнал, что vim’овский omni completion (который есть простенький аналог intelliSense) умеет закрывать html тэги.
Пример:

<table> </<C-X><C-O>

<C-X><C-O> закроет table

Можно, конечно, использовать скрипт closetag.vim. Там, для закрытия тэга, писать </ не надо — это плюс. Правда его нужно устанавливать отдельно — это минус.

Я, скорее всего, откажусь от closetag’а и буду использовать omni completion.
Примерно так:

imap <C-_> </<C-X><C-O>

Нажимаешь <C-_> — открытый тэг закрыватся.

Vim — закрыть открытые скобки

2008-08-01 11:41; Tags: , ,

Тем кто пишет на Лиспе (Схеме) в Виме может быть интересен скрипт, закрывающий открытые скобки (unbalanced parens). Ничего особенного в нем нет — со своей работой справляется. Однако функция s:isInLispExpression() тупая как пробка, ее нужно еще тюнить и тюнить. :)

" Lisp stuff {{{

"" Close parens
function! s:isInLispExpression(linenr) " {{{
    let result = 1
    if a:linenr < 0
        let result = 0
    else
        let line = getline(a:linenr)
        if line == ""
            let result = 0
        endif
    endif

    return result
endfunction " }}}

function! s:LispCountOpenedParens(line) "{{{
    let unbalanced = 0
    let idx = 0
    while idx < len(a:line)
        if a:line[idx] == '('
            let unbalanced += 1
        elseif a:line[idx] == ')'
            let unbalanced -= 1
        endif
        let idx += 1
    endwhile
    return unbalanced
endfunction "}}}

function! s:LispCloseParens(linenr) "{{{
    let unbalanced = 0
    let lineidx = a:linenr
    while s:isInLispExpression(lineidx)
        let line = getline(lineidx)
        let unbalanced += s:LispCountOpenedParens(line)
        let lineidx -= 1
    endwhile
    if unbalanced > 0
        execute "normal ".unbalanced."A)\<ESC>"
    endif
endfunction "}}}

command! LISPCloseParens call <SID>LispCloseParens(line('.'))
map <Leader>) :LISPCloseParens<CR>

"" }}}

Upd.
Написал улучшенный вариант “балансировки” скобок.

wiki to html

2008-05-28 17:17; Tags: ,

На работе выдалась свободная минутка, засел за конвертер wiki разметки в html. Мозг приходится напрягать, да. Пока получается вот что:

vimwiki

2008-05-20 16:34; Tags: ,

Тут, было дело, написал плагин к любимому текстовому редактору emacs vim. Называется он vimwiki и позволяет писать связанные друг с другом текстовые файлы — получился персональный wiki. Написал, опубликовал на офф-сайте, и теперь каждый день смотрю как он там поживает, сколько раз скачали, какой рейтинг ему поставили — беда.

В общем, тамагочи получился.

« Newer Posts

Powered by WordPress