Я наконец научился эффективно работать с тегами :) Для этого можно и нужно использовать grep, плюс пару трюков из документации.
Ключевой момент - правильная расстановка тегов, а именно:
Тегом помечается ключевой абзац заметки. Если это линк - заголовок линка, если это заметка с заголовком - заголовок, если это просто заметка - ее первый абзац. В пробежках хорошо бы выделять дату (можно даже тупо забить сразу в мапинг).
Как искать по тегам? Через грепы.
читать дальше в wordpress'e Первоначальный поиск можно организовать так:
:tabnew
Это откроет новую вкладку.
Дальше:
:r! grep -nH "=реца" main.txt
Ключи:
-n - нумеровать строки
-H - выводить имя файла
Получается примерно такое:
main.txt:62944:Мартин Ли "Странная сага телохранителя Гитлера" =книги =реца =мысли =ТретийРейх =с4 =СВК =Драконы =ГСП =ТротиловаяВойна =ПланЯшма =ЛепесткиХризантемы
main.txt:63963:Уэстлейк "Полицейские И Воры" =книги =реца
main.txt:84493:Хоблит "Перелом" =фильм =реца
main.txt:85088:Стон Черной Змеи =фильм =блюз =реца
main.txt:85148:Широкорад - "Россия и Китай: Конфликты и сотрудничество" (серия Военные Тайны XX века) =книги =авторы =реца
main.txt:86783:Степан Бандера 1909-1959 =линк =Украина =история =фильм =реца =разгрести =Бандера =2048
main.txt:91279:Шекли "Дипломатический иммунитет" =книги =авторы =Шекли =реца
main.txt:91423:Андреев "Худловары" =книги =авторы =реца
main.txt:105676:Ложная слепота Уоттса =реца =мысли =контр =конспект =пост
main.txt:107481:Ложная слепота Уоттса - 2 =реца =мысли =контр =конспект =пост =холд
main.txt:109647:Смотрю ГИГ ака GitS SAC второй сезон. Вторая серия (мечтатель) - это четкая реминисценция на Таксиста =реца
Это уже готовые ссылки на статьи в блоге. Достаточно стать на "main.txt" нужной строки и набрать gF - и vim откроет файл в нужном месте. Ctrl+O вернет вас назад по истории переходов, Ctrl+I - вперед. То есть имея такую поисковую выборку можно нырять туда-обратно в основной файл или даже в комплект файлов.
Можно добавить в один файл несколько результатов грепа сразу - просто набрать подряд несколько грепов по разным тегам.
например:
Последовательно набрав:
r!grep =реца main.txt =nH
r!grep =рецензия main.txt =nH
r!grep =конспект main.txt =nH
Получим:
main.txt:62874:Камедиклаб Просто Радио =реца
main.txt:62944:Мартин Ли "Странная сага телохранителя Гитлера" =книги =реца =мысли =ТретийРейх =с4 =СВК =Драконы =ГСП =ТротиловаяВойна =ПланЯшма =ЛепесткиХризантемы
main.txt:63963:Уэстлейк "Полицейские И Воры" =книги =реца
main.txt:84493:Хоблит "Перелом" =фильм =реца
main.txt:85088:Стон Черной Змеи =фильм =блюз =реца
main.txt:85148:Широкорад - "Россия и Китай: Конфликты и сотрудничество" (серия Военные Тайны XX века) =книги =авторы =реца
main.txt:86783:Степан Бандера 1909=1959 =линк =Украина =история =фильм =реца =разгрести =Бандера =2048
main.txt:91279:Шекли "Дипломатический иммунитет" =книги =авторы =Шекли =реца
main.txt:91423:Андреев "Худловары" =книги =авторы =реца
main.txt:105676:Ложная слепота Уоттса =реца =мысли =контр =конспект =пост
main.txt:107481:Ложная слепота Уоттса - 2 =реца =мысли =контр =конспект =пост =холд
main.txt:109647:Смотрю ГИГ ака GitS SAC второй сезон. Вторая серия (мечтатель) - это четкая реминисценция на Таксиста =реца
main.txt:91444:Андреев - не-гуманитарий. Все не-гуманитарии заканчивают тем, что упираются в философскую проблему (чему равен синус-от-сердца?) и на этом для них все заканчивается. =книги =авторы =рецензия
main.txt:103027:Детектив Ди Жэньцзе =фильм =рецензия =пост
main.txt:109500:Кургинян "Суть времени" =конспект =рецензия
main.txt:83279:=конспект =мысли =контрманипуляция Турбо-Суслик
main.txt:83415:=конспект =мысли =контрманипуляция Турбо-Суслик продолжение
main.txt:84950:Осваиваюсь в философии. Сегодня благодаря дтв-атласу и Балашову начал укладывать в голове общую схему развития. Получается неплохо. Дальше идет большая-большая схема. =философия =мысли =конспект =заметки
main.txt:92683:Сейчас читаю "Я прав - вы заблуждаетесь" Де Боно. В один момент начало казаться, что у человека просто высосанные из пальца концепции - то есть примеры в его книге не блещут разнообразием (кстати, у Франкла я замечал подобное), но когда вчитался внимательнее - понял что человек похоже один из немногих, кто правильно разобрался в том, как работает наше мышление. =ДеБоно =конспект =книга =автор =мысли
main.txt:105676:Ложная слепота Уоттса =реца =мысли =контр =конспект =пост
main.txt:105919:Периферийная Империя Кагарлицкий и Кондратьев =конспект =сфи =идеи =с4 =смвк =хронология
main.txt:106058:Барри Шварц =конспект =палм =мысли =пост
main.txt:106290:Начал читать Айкидо =оуе =заметки =конспект
main.txt:107481:Ложная слепота Уоттса = 2 =реца =мысли =контр =конспект =пост =холд
main.txt:109500:Кургинян "Суть времени" =конспект =рецензия
main.txt:109520:Кагарлицкий Периферийная Империя скелет конспекта =конспект
Результаты поиска можно фильровать - выделить текст и пропустить его фильтром через тот же греп, при этом совсем не обязательно задавать тег - можно задать ключевое слово:
ggVG!
и в поисковой строке набрать (:'<,'>! Vim подставит сам):
:'<,'>!grep "фильм"
в итоге останется:
main.txt:84493:Хоблит "Перелом" =фильм =реца
main.txt:85088:Стон Черной Змеи =фильм =блюз =реца
main.txt:86783:Степан Бандера 1909=1959 =линк =Украина =история =фильм =реца =разгрести =Бандера =2048
main.txt:103027:Детектив Ди Жэньцзе =фильм =рецензия =пост
(номера могут меняться - поскольку я пишу эту инструкцию в том же файле, который грепаю :)
Пример номер два. Здесь не используются теги, зато показано, как работает "прямой поиск" - то что я называю "сам себе гугл" :)
Когда я
беседовал с уважаемым
ОллиКатом мне понадобилось найти ссылки на репорты по DVCS разработчиков Питона и Гугла. Поиск по mercurial не выдал ничего внятного:
:tabnew
:r!grep -nHI mercurial main.txt
Получил следующее:
main.txt:20844: evince djview4 evince markdown mercurial makeztxt
main.txt:20987:mercurial
main.txt:27044:Конспект и освоение mercurial.
main.txt:27046:
http://blgo.ru/blog/category/mercurial/main.txt:27050:
http://www.selenic.com/mercurial/hg.1.htmlmain.txt:27053:mercurial (hg) - unixforum.org
main.txt:27055:mercurial - Поиск в Google
main.txt:27058:
http://mercurial.selenic.com/wiki/TipsAndTricksmain.txt:27066:
http://hgbook.red-bean.com/read/a-tour-of-mercurial-the-basics.htmlmain.txt:27068:
http://hgbook.red-bean.com/read/a-tour-of-mercurial-merging-work.htmlmain.txt:27072:
http://hgbook.red-bean.com/read/mercurial-in-daily-use.html...
main.txt:107671:
http://antonym.org/2010/04/25-tips-for-intermediate-mercurial-users.htmlmain.txt:107826:
http://mercurial.selenic.com/wiki/MergingWithVimmain.txt:107842:
http://stackoverflow.com/questions/1869040/what-are-the-best-and-must-have-hg-mercurial-extensionsmain.txt:107843:What are the best and must-have hg / mercurial extensions? - Stack Overflow
main.txt:109737:
http://blgo.ru/blog/tag/mercurial/ (всего получилось 57 результатов)
Сортировка по фильтрам grep python и grep google ничего не дала.
Я зашел с другого конца, вспомнив, что первый отчет был с python.org, второй с codes.google.
Очистил окно:
ggdG
:r!grep -nHI code.google main.txt
В ответ получил такую простынь:
main.txt:17060:
http://code.google.com/p/amv-codec-tools/wiki/HowToConvertToAMVmain.txt:19745: # Generated by tintwizard (
http://code.google.com/p/tintwizard/)
main.txt:19746: # For information on manually configuring tint2 see
http://code.google.com/p/tint2/wiki/Configuremain.txt:86060:
http://code.google.com/p/vimwiki/main.txt:88384:
http://code.google.com/p/key-mon/main.txt:95839:
http://code.google.com/p/amv-codec-tools/wiki/HowToConvertToAMVmain.txt:102627:
http://code.google.com/p/vimming/source/checkoutmain.txt:102840:
http://code.google.com/p/vimming/source/checkoutmain.txt:109744:
http://code.google.com/p/support/wiki/DVCSAnalysis Ага. Вот последняя строка и есть нужная мне ссылка. Встав на main.txt и набрав gF (обратите внимание - F, а не f - gf просто переходит к файлу, gF переходит к файлу и переставляет курсор на нужную строку - см :h gF. Отчет по Питону нашелся рядом, но для наглядности я могу показать и его.
ggdG
:r!grep -nH python.org main.txt
Получаем:
main.txt:4843:
http://wiki.python.org/moin/RssLibrariesmain.txt:69207:
http://www.python.org/doc/faq/windows/main.txt:79215:
http://docs.python.org/library/md5.htmlmain.txt:88242:
http://docs.python.org/library/optparse.htmlmain.txt:88563:
http://mail.python.org/pipermail/tutor/2003-June/023434.htmlmain.txt:88600:
http://mail.python.org/pipermail/tutor/2004-November/033333.htmlmain.txt:88603:
http://mail.python.org/pipermail/tutor/2002-April/013989.htmlmain.txt:88606:
http://mail.python.org/pipermail/tutor/2002-November/018528.htmlmain.txt:92596:
http://www.python.org/dev/peps/pep-0374/#svnmain.txt:109741:
http://www.python.org/dev/peps/pep-0374/#patch-review Последняя ссылка и есть искомая (если заметите - на самом деле у меня их две).
Можно инвертировать поиск (-v ключ для grep'а), можно делать многотеговые поиски по нескольким файлам или сразу по всему блогу. В общем - есть где развернуться. Наверное, позже я просто сделаю бинды на хоткеи, но пока такой системы хватает с головой. Можно еще написать раскраску для такого файла (чтобы имя-файла, номер строки и возможные теги подсвечивались разными цветами, можно написать правильный хоткей для перехода (чтобы ходить по gf, а не по gF).
Можно увеличить контекст (сделать так, чтобы греп выводил больше одной строки) и, например, сделать подборку ссылок.
Еще бы сделать автоматическую простановку тегов (в виде вываливающейся менюшки по хоткею) и получится весьма и весьма мощная система работы с заметками. Гугл, который всегда с тобой :)
Прелесть этого решения в том, что все делается стандартными средствами vim и операционной системы и не требует каких-то особых скиллов в программировании или написания своих продуктов. Важно было для себя определить что имено я хочу видеть в результате поиска по тегам.
Если копнуть глубже, оказывается, что quickfix window использует ту же схему. Только оно как по мне менее удобно - как минимум тем, что на него сложно наложить дополнительные фильтры, как в примерах выше. Собственно, первоначальную идею мне именно quickfix и подсказал - я забил в поиск по :vimgrep тег и получил список результатов. Поскольку на тот момент времени теги у меня были отдельно - это был просто список типа:
main.txt:89560:=бег =МК
main.txt:89595:=бег =МК
main.txt:89743:=бег =МК
main.txt:89763:=бег =МК
main.txt:89855:=бег =СМК
main.txt:90025:=бег =МК
main.txt:90059:=бег =МК
main.txt:90498:=бег =СК
main.txt:90525:=бег =МК
main.txt:90630:=бег =СК
main.txt:90997:=бег =СК
main.txt:91137:=бег =СК
main.txt:91268:=бег =СМК
Отсюда и напрашивался вывод: чтобы работа с тегами была эффективной, теги должны стоять в одной строке с каким-то ключевым пояснением - заголовком, ключевым абзацем или просто на первой строке, чтобы из результата было понятно куда именно мне прыгать - см правило с которого я начал этот пост.