Малая Карта для АБТФ — теперь и в bash

Малая Карта. Позволяет открывать в боковом меню «карту»-содержание большого текстового файла (заголовками считаются все строки, которые начинаются с #). Карта открывается по ,mm. По <Enter> на любом из заголовков, файл в главном окне прокручивается на нужный заголовок. По <Esc> меню с картой закрывается.

Использую этот скрипт примерно полгода уже год — и не могу нарадоваться. Он очень упрощает работу с АБТФ и используется намного шире, чем я предполагал в самом начале. Практически любой текст, который размечен через # можно открыть в виде содержания и быстро найти нужный раздел.

Если поставить себе расширение Vim Outliner, то содержание будет выводиться компактнее — в виде аутлайна, который «схлопывает» разделы.

Для работы нужно создать в ~/bin файл zbsm:

cd ~/bin
touch zbsm

И отредактировать его, добавив в него строки:


#!/bin/bash
grep '^#' -nH $@ | awk -F: '{print  $3 "  ~"$2}' | sed 's/#/\t/g'


В .vimrc добавляются следующие строки:


" ***************************************************************
" *                                                             *
" *                       Малая Карта                           *
" *                                                             *
" ***************************************************************
" v 2011-05-27 09:25
" переход на bash-скрипт вместо утилиты на Питоне

" v 2011-01-27 15:44
" normal команды заменены на функции поиска

" Основная идея - по хоткею открыть боковое окно с деревом файла.
" по энтеру файл прокручивается к нужному заголовку
" по <Esc> окно закрывается

function! SmallMap_Close()
    " вспомогательная функция
    " закрываем окно МК - Малой Карты
    execute "bd!"
    execute "!rm z.otl"
    normal zt

    " варианты на правое-нижнее открытие меню
    "set nosplitright
    "set nosplitbelow

endfunction

function! SmallMap()
    " основная функция

    " варианты на правое-нижнее открытие меню
    "set splitright
    "set splitbelow

    " проверяем - где находится курсор
    if bufname("%") == "z.otl" 
    " если внутри z.otl - то файл проматывается на заголовок курсора
        " получаем номер нужной строки
        let NumNum = str2nr(matchstr(getline(line(".")),'[~][^~]*$')[1:])
        " прыгаем в окно большого файла
        execute "normal \<C-W>l"
        call cursor(NumNum,1) " переставляет курсор в нужную строку
        " откручиваем заголовок в самую верхнюю строку
        normal zt
        " прыгаем назад в меню
        execute "normal \<C-W>h"
    
    else
    " если нет - создаем z.otl и переназначаем Enter и хоткеи
        "создаем МК
        "execute "!python .zsm.py % > z.otl"
        execute "!~/bin/zbsm % > z.otl"

        "открываем файл МК в боковом сплите (возможны разные варианты)
        execute "40vsplit z.otl" 
        " теперь Enter вызывает SmallMap и соответственно проматывает файл
        map <buffer> <Return> :call SmallMap()<CR> 
        map <buffer> <Esc> :call SmallMap_Close()<CR> 
        map <buffer> ,mm :call SmallMap_Close()<CR> 
    endif
endfunction
" хоткей для вызова карты
map ,mm :call SmallMap()<CR> 


Реклама

20 Responses to Малая Карта для АБТФ — теперь и в bash

  1. Молодца! :)
    А у меня все руки ни как не дойдут до конца доделать. :( Пока только набросал файл синтаксиса для Файла и фолдинг сделал.

    К тому же эта концепция у меня прижилась очень удачно на работе, для записывания своей рабочей активности и отмечания чего сделать/чего сделано. Надо конечно еще кое чего сделать, для того, что бы было совсем хорошо. :)

  2. К стати код вставленный тобой сюда мягко говоря не рабочий: кто-то тебе ковычки покорежил. ;) В частности вместо ‘ вставлена ‘, это мягко говоря для кода не совсем одно и то же. :))) Кто тебе так корежит код, сам вордпресс?

  3. В принципе с фолдингом такая карта не нужна. Но на моих объемах файлов оно начинает тормозить :) Плюс — находясь в «содержании» я могу искать среди заголовков через «/» поиск. А вот на файл синтаксиса было бы интересно посмотреть :)))

    Я сейчас в очередной раз все переделываю. Решил для себя наконец вопрос с тегами — grep forever :) Очень сильно упростил синтаксис подсветки — убрал фолдинг, потому, что заметил, что не пользуюсь им. И так далее.

    А что у тебя в планах?

  4. Скорее всего вордпресс. Надо посмотреть поближе — мб попробую подредактировать. Уже не первый раз :(

  5. Это не столько вп, сколько я сам. Надо было поставить тег code. Обычно у меня это делает маркдаун, но в этот раз я решил раскрасить код и сделал это через :TOhtml фичу вима. И скопировал оттуда без code. Все вроде пофиксил.

  6. Да не вопрос, смотри. :) может че умное подскажешь, ибо я тупо брал готовый и перекудывал как умел под себя: https://github.com/OllyCat/home_configs/blob/master/.vim/syntax/clipboard.vim

    Там главное учти, что у меня секция в файл оформлена примерно так:

    ~ 2011-04-25 11:27 11 s Тут типа заголовок и =теги=
    bla-bla-bla
    ~end

    Дата и время — опциональная вещь. Главное, что секция начинается с тильды + пробел, а заканчивается… ну ты понял. ;)

    Планов как таковых четких вроде нет… идеи появляются — допиливаю.

  7. О, теперь другое дело. :) Я в себе прикрутил в блог syntaxhighlighter, классная вещь! И код всегда нормальный, и читать легко, и копировать тоже.

  8. А как? :) У меня, кстати, не совсем пока понятно — я тексты храню в том числе в абтф с прицелом на stand-alone статический блог. И все время балансирую между читабельностью в текстовом виде (где проще всего использовать markdown) и расцветкой в блоге (где нужно использовать какой-нибудь сторонний генератор подсветки).

  9. http://alexgorbatchev.com/SyntaxHighlighter/

    Да вот собственно. :) Там все расписано, для блогспот была раздел, для вордпресса не помню, но наверняка тоже должно быть. Можно, если есть возможность, яваскрипты у себя выложить, если нет — можно юзать ихние.

  10. О! Рулез-рулез :))) Цельный реп в котором можно подсмотреть клевые фичи :))) Уже понравилась идея с датастампом :))) О! И чтение док/pdf — тоже надо будет попробовать. А MyConvertFileToHtmlForBlog()
    рабочая? :)

    Как я понимаю, в организационном плане, тебе важны именно теги. То есть структуры-иерархии у тебя нет, насколько я могу судить по настройкам — а весь файл это сплошная лента, разделенная датастампами. Такой формат мне очень удобно грепать по тегам :) Вот еще думаю все-таки усовершенствовать механизм вставки тегов — но пока не уверен, что копаю в нужную сторону.

  11. Блин. Оно оказывается прикручено по умолчанию :))) Спасибо :)))

    Век живи — век учись. Дураком помрешь :)

  12. Конверт в html для блога — рабочий, но это не мое, где-то тырено (да простит меня автор, не помню его ника!). К тому же уже давно им не пользуюсь. Не очень подходила расцветка, а самому цвета распределять было лень. Поэтому осталось как раритет, ну и для примера кода.

    Файл у меня действительно совершенно плоский. Важно заголовки и теги. Иногда датастамп. Поэтому так все сделано.

    Про вставку тегов тоже уже думал. Идея была сделать выпадающее меню. Но пока руки не дошли опять же. :(

    Чет только не понял что ты имел ввиду говоря про pdf… :)

  13. Да это нормально. ;) Сам постоянно чего-то новое нахожу для себя, удивляюсь и думаю как я раньше без этого жил. :)

  14. Про пдф — это строки 79-81 в vimrc.

    Я тоже копал в направлении меню, потом понял, что мне нужно что-то более гибкое (и тегов у меня много — должны быть по категориям). И теперь думаю про аналогию с Картой. Открывается горизонтальный сплит, который поделен еще на вертикальный сплит… это лучше отдельным комментом вывесить :) тут уже не влезет :)

  15. +------------+-------------+
    |            |             |
    |    1       |      2      |
    |            |             |
    +------------+-------------+
    |                          |
    |            3             |
    |                          |
    +--------------------------+
    

    Получается, что в 3 — основное окно, 2 — текст с тегами, 1 — большая карта окна 2.

  16. А, это! :) Да это так давно вбил туда, что уже забыл даже. :))) Да, удобно, открывать vim-ом можно почти любой файл при таких настройках. Особой популярностью у меня пользуется открытие файлов .gpg ;)

    Да, если тегов много, тогда конечно лучше как ты думал. Со сплитом, тут я соглашусь.

  17. Ну я так примерно и понял. Правда подумал:

    3 — основное
    1 — категории тегов
    2 — список тегов в категории

  18. Как-то ты криво код поправил: только первые две строки нормально подсветка включилась, остальное — как было осталось. :)

  19. Я только первое и поправил :) Для пробы :)

  20. А, понятно. :) Ну проба прошла удачно. ;)

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: