Когда ведешь записи в текстовом блоге, редактор который может проставить в тексте время и дату, экономит чертовски много сил. Особенно странному зверьку вроде вашего покорного слуги, который (а) терпеть не может писать дату и время вручную (б) считатет, что хорошее и правильное датирование удваивает ценность записей. См. Самонаводящиеся Заметки.
Польза от таких таймстампов не только в том, что они позволяют привязать заметку к конкретной дате, но и в том, что они (у меня во всяком случае) могут служить уникальными номерами для заметок и дисков, позволяя сортировать их по дате и находить нужный конкретный диск. Такая нумерация намного точнее и информативнее, чем простые номера, плюс, как это ни странно, не требует "включать голову".
Если вы нумеруете диски или папки с фотографиями dvd1, dvd2, ... то на шаге N непременно задумаетесь - вам ставить N, N-1 или N+1? (особенно, если диск записывается где-нибудь далеко от дома и N предыдущих дисков). С датами такой проблемы нет dvd20090124, dvd20090125 - а если они идут более часто - всегда можно кроме даты подключить время, или нумеровать диски в пределах одного дня dvd20090124_1, dvd20090124_2, dvd20090124_3, ...
Формат даты - видимо дело личных предпочтений. Я исхожу из прагматичных соображений - если писать даты как год-месяц-день (2009-01-24 или 20090124), то пронумерованные так файлы (или директории, или заметки, или текстовые поля) выстраиваются по времени сами собой - достаточно рассортировать их список по алфавиту. С подачи WinOrganizer'а я привык к таймстампам год-месяц-день часы:минуты и в других редакторах перестраивал их точно так же.
В Vim таймстампы я реализовал с помощью аббревиатур.
В моем vimrc вписаны следующие функции:
iab Втс=strftime("%H:%M")
iab Вдс=strftime("%Y-%m-%d")
iab Вдтс=strftime("%Y-%m-%d %H:%M")
iab Бдтс=strftime("д %Y-%m-%d %H:%M")
если я набираю одну из аббревиатур - она автоматически заменяется на текущее время в нужном формате:
Втс (Вставить тайм-стамп)
15:48
Вдс (Вставить дата-стамп)
2009-01-24
Вдтс (Вставить дата-тайм-стамп)
2009-01-24 15:48
Бдтс (Блоговый Дата-Тайм-Стамп - для записей в дневнике)
д 2009-01-24 15:48
Все таймстампы всегда подсвечиваются - у меня есть отдельный файлик синтаксиса blog.vim, где в числе прочих прописана подсветка и для таймстампов:
syntax clear
syntax sync fromstart
...
" подсветка Втс
highlight Timestamp term=bold ctermfg=4 guifg=#80a0ff
syn match Timestamp /[0-2][0-9][:][0-5][0-9]/
" подсветка Вдс
highlight Timestamp2 term=bold ctermfg=4 guifg=#80a0ff
syn match Timestamp2 /[12][90][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/ nextgroup=Timestamp skipwhite
" Вдтс подсвечивается само - Вдс+Втс
" подсветка Бдтс
highlight MyBlogTimestamp term=bold ctermfg=4 guifg=#80a0ff
syn match MyBlogTimestamp /^д\s.*$/ contains=ALL
Так оно выглядит в электронном формате. Что касается бумаги... раньше я в записных книжках ставил даты в том же формате, пока, в GitS:SAC не подсмотрел "военную форму записи" - где время просто пишется четырьмя цифрами без разделителей - что хорошо читается и легко пишется: 1200, 2130 и так далее. Эта привычка началась с бумаги, потом распространилась на даты (20090124) и сейчас плавно перетекла в электронную форму - если я набираю время/дату вручную, то чаще всего это выглядит именно так.
Есть еще одна проблема. Я терпеть не могу держать в голове что сейчас за день (месяц, год), но она легко решаема - электронные часы с календарем и доведенный до автоматизма рефлекс - перед тем как что-то писать - независимо от того это запись на клочке бумаги, в записной книжке или список студентов - нажать кнопку и записать цифры на бумагу. Голову включать (точнее отвлекать от мыслей, которыми она занята) совсем не требуется. Дома это дополняется часиками BetaClock в трее, которые крупными цифрами показывают не только время, но и дату с днем недели. Но бумага (например, как нумеровать страницы в записной книжке, если терпеть не можешь этого делать) - это отдельный разговор.
Раз уж речь зашла о подсветке, то, чтобы дважды на этом не останавливаться - вот подсветка для всего остального.
" добавляю подсветку для плейнтекста
match Comment /{.\+}/
syntax clear
syntax sync fromstart
" подсвечивает желтым крылатые =тэги=
highlight BlogTag term=bold ctermfg=4 guifg=#D2D200
syn match BlogTag /[=][^ ]\{,20}[=]/ contains=Oye
" подсвечивает темно-зеленым мои комментарии в разных вариантах
" комментарии вида //
highlight meComment term=bold ctermfg=6 guifg=darkgreen
syn region meComment start=/[^:/]\/\// end=/$/
highlight meComment2 guifg=darkgreen
syn region meComment start=/^\/\// end=/$/
" комментарии вида { }
highlight meComment3 guifg=darkgreen
syn region meComment start=/ {/ end=/}/
highlight meComment4 guifg=darkgreen
syn region meComment start=/^{/ end=/}/
" комментарии вида /* */
syn region meComment start=/\/\*/ end=/\*\//
" подсвечивает оранжевым цветом заголовки разделов
highlight meHeader term=bold ctermfg=6 guifg=Orange
syn region meHeader start=/^\~/ end=/$/
" выделяет красным цветом важные места - я их отмечаю
" двумя восклицательными знаками в начале строки
highlight NB term=bold ctermfg=6 guifg=Red
syn match NB /^!! .\+$/
" выделяет голубым цветом цитаты и квотинг - я их отмечаю
" знаком > в начале строки
highlight Citer term=bold ctermfg=6 guifg=#62EDF0
syn region Citer start=/^>/ end=/$/
" подсветка Втс
highlight Timestamp term=bold ctermfg=4 guifg=#80a0ff
syn match Timestamp /[0-2][0-9][:][0-5][0-9]/
" подсветка Вдс
highlight Timestamp2 term=bold ctermfg=4 guifg=#80a0ff
syn match Timestamp2 /[12][90][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/ nextgroup=Timestamp skipwhite
" Вдтс подсвечивается само - Вдс+Втс
" подсветка Бдтс
highlight MyBlogTimestamp term=bold ctermfg=4 guifg=#80a0ff
syn match MyBlogTimestamp /^д\s.*$/ contains=ALL
Раньше такая подсветка включалась через vimrc или по хоткею. Сейчас у меня просто в самом начлале каждого блога есть моделайн - строка вида:
//моделайн: vim: syntax=blog:
Вим подхватывает ее, определяет тип подсветки через эту строчку и включает подсветку автоматически. Так что все работает само и без моего участия :)
Польза от таких таймстампов не только в том, что они позволяют привязать заметку к конкретной дате, но и в том, что они (у меня во всяком случае) могут служить уникальными номерами для заметок и дисков, позволяя сортировать их по дате и находить нужный конкретный диск. Такая нумерация намного точнее и информативнее, чем простые номера, плюс, как это ни странно, не требует "включать голову".
Если вы нумеруете диски или папки с фотографиями dvd1, dvd2, ... то на шаге N непременно задумаетесь - вам ставить N, N-1 или N+1? (особенно, если диск записывается где-нибудь далеко от дома и N предыдущих дисков). С датами такой проблемы нет dvd20090124, dvd20090125 - а если они идут более часто - всегда можно кроме даты подключить время, или нумеровать диски в пределах одного дня dvd20090124_1, dvd20090124_2, dvd20090124_3, ...
Формат даты - видимо дело личных предпочтений. Я исхожу из прагматичных соображений - если писать даты как год-месяц-день (2009-01-24 или 20090124), то пронумерованные так файлы (или директории, или заметки, или текстовые поля) выстраиваются по времени сами собой - достаточно рассортировать их список по алфавиту. С подачи WinOrganizer'а я привык к таймстампам год-месяц-день часы:минуты и в других редакторах перестраивал их точно так же.
В Vim таймстампы я реализовал с помощью аббревиатур.
В моем vimrc вписаны следующие функции:
iab Втс
iab Вдс
iab Вдтс
iab Бдтс
если я набираю одну из аббревиатур - она автоматически заменяется на текущее время в нужном формате:
Втс (Вставить тайм-стамп)
15:48
Вдс (Вставить дата-стамп)
2009-01-24
Вдтс (Вставить дата-тайм-стамп)
2009-01-24 15:48
Бдтс (Блоговый Дата-Тайм-Стамп - для записей в дневнике)
д 2009-01-24 15:48
Все таймстампы всегда подсвечиваются - у меня есть отдельный файлик синтаксиса blog.vim, где в числе прочих прописана подсветка и для таймстампов:
syntax clear
syntax sync fromstart
...
" подсветка Втс
highlight Timestamp term=bold ctermfg=4 guifg=#80a0ff
syn match Timestamp /[0-2][0-9][:][0-5][0-9]/
" подсветка Вдс
highlight Timestamp2 term=bold ctermfg=4 guifg=#80a0ff
syn match Timestamp2 /[12][90][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/ nextgroup=Timestamp skipwhite
" Вдтс подсвечивается само - Вдс+Втс
" подсветка Бдтс
highlight MyBlogTimestamp term=bold ctermfg=4 guifg=#80a0ff
syn match MyBlogTimestamp /^д\s.*$/ contains=ALL
Так оно выглядит в электронном формате. Что касается бумаги... раньше я в записных книжках ставил даты в том же формате, пока, в GitS:SAC не подсмотрел "военную форму записи" - где время просто пишется четырьмя цифрами без разделителей - что хорошо читается и легко пишется: 1200, 2130 и так далее. Эта привычка началась с бумаги, потом распространилась на даты (20090124) и сейчас плавно перетекла в электронную форму - если я набираю время/дату вручную, то чаще всего это выглядит именно так.
Есть еще одна проблема. Я терпеть не могу держать в голове что сейчас за день (месяц, год), но она легко решаема - электронные часы с календарем и доведенный до автоматизма рефлекс - перед тем как что-то писать - независимо от того это запись на клочке бумаги, в записной книжке или список студентов - нажать кнопку и записать цифры на бумагу. Голову включать (точнее отвлекать от мыслей, которыми она занята) совсем не требуется. Дома это дополняется часиками BetaClock в трее, которые крупными цифрами показывают не только время, но и дату с днем недели. Но бумага (например, как нумеровать страницы в записной книжке, если терпеть не можешь этого делать) - это отдельный разговор.
Раз уж речь зашла о подсветке, то, чтобы дважды на этом не останавливаться - вот подсветка для всего остального.
" добавляю подсветку для плейнтекста
match Comment /{.\+}/
syntax clear
syntax sync fromstart
" подсвечивает желтым крылатые =тэги=
highlight BlogTag term=bold ctermfg=4 guifg=#D2D200
syn match BlogTag /[=][^ ]\{,20}[=]/ contains=Oye
" подсвечивает темно-зеленым мои комментарии в разных вариантах
" комментарии вида //
highlight meComment term=bold ctermfg=6 guifg=darkgreen
syn region meComment start=/[^:/]\/\// end=/$/
highlight meComment2 guifg=darkgreen
syn region meComment start=/^\/\// end=/$/
" комментарии вида { }
highlight meComment3 guifg=darkgreen
syn region meComment start=/ {/ end=/}/
highlight meComment4 guifg=darkgreen
syn region meComment start=/^{/ end=/}/
" комментарии вида /* */
syn region meComment start=/\/\*/ end=/\*\//
" подсвечивает оранжевым цветом заголовки разделов
highlight meHeader term=bold ctermfg=6 guifg=Orange
syn region meHeader start=/^\~/ end=/$/
" выделяет красным цветом важные места - я их отмечаю
" двумя восклицательными знаками в начале строки
highlight NB term=bold ctermfg=6 guifg=Red
syn match NB /^!! .\+$/
" выделяет голубым цветом цитаты и квотинг - я их отмечаю
" знаком > в начале строки
highlight Citer term=bold ctermfg=6 guifg=#62EDF0
syn region Citer start=/^>/ end=/$/
" подсветка Втс
highlight Timestamp term=bold ctermfg=4 guifg=#80a0ff
syn match Timestamp /[0-2][0-9][:][0-5][0-9]/
" подсветка Вдс
highlight Timestamp2 term=bold ctermfg=4 guifg=#80a0ff
syn match Timestamp2 /[12][90][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/ nextgroup=Timestamp skipwhite
" Вдтс подсвечивается само - Вдс+Втс
" подсветка Бдтс
highlight MyBlogTimestamp term=bold ctermfg=4 guifg=#80a0ff
syn match MyBlogTimestamp /^д\s.*$/ contains=ALL
Раньше такая подсветка включалась через vimrc или по хоткею. Сейчас у меня просто в самом начлале каждого блога есть моделайн - строка вида:
//моделайн: vim: syntax=blog:
Вим подхватывает ее, определяет тип подсветки через эту строчку и включает подсветку автоматически. Так что все работает само и без моего участия :)


no subject
Date: 2009-01-25 09:43 am (UTC)no subject
Date: 2009-01-25 09:57 am (UTC)Кстати, если подскажешь в какую сторону копать - буду длагобарен :)
no subject
Date: 2009-01-25 01:35 pm (UTC)К стати я тут начал тоже подрихтовывать свой "большой файл". Есть кое-какие мысли. В частности решил, попробовать сделать фолдинг. Не пробовал? Как такая идея, живучая?
no subject
Date: 2009-01-25 01:36 pm (UTC)no subject
Date: 2009-01-25 02:43 pm (UTC)Стоит, наверное, порыться в вимоплагинах - возможно, нужный уже есть, или хотя бы разобраться, как они создаются :)
З.Ы. По размышлении могу сказать что я бы предпочел SQLite одному текстовому файлу.
no subject
Date: 2009-01-26 12:38 pm (UTC)Попробовал сделать это через tags. Проходим по нашему файлу простеньким коневейером:
egrep -H -n -o "=[^ ]+=" ~/big_file | awk 'BEGIN{FS=":"}{print $3 "\t" $1 "\t" $2}' | sort > ~/tags
И теги вставляем комбинацией CTRL+X CTRL+] из выпадающего меню. :) Осталось решить как бы грамотнее оформить само выгребание тегов. Может запуском скрипта после каждого вновь созданного тега/записи в блог? Не знаю, надо подумать.
Ну как идея? Проверил, работает. :)
no subject
Date: 2009-01-27 09:33 am (UTC)Как раз сижу сейчас на работе под убунтой :) Единственно мне пришлось еще добавить recode в начало - у меня файл все еще в cp1251, все ни как не заставлю себя перейти в юникод.
Я бы сделал двумя вариантами - первый завязал бы это дело на хоткей с помощью map, второй - сделал бы шелловский скрипт с характерным названием (что-нибудь типа retagg) и положил бы его в каталог рядом с main_file. Может быть даже сделал ему возможность получения аргумента из комстроки. И запускал бы прямо из vim
:!retagg или :!retagg %
В принципе у меня аналогично построена работа с расстановкой содержаний по файлу и генерация майндмэпа :))) Я еще просто не добрался до этого :))
no subject
Date: 2009-01-27 12:58 pm (UTC)С тегами, да и вообще с vim у меня тоже большой пробел. Как я и писал раньше, до этого пользовался только самыми базовыми функциями. А тут твоя первая и последующие заметки о "большом файле" и vim легли в благодатную почву. ;) Сейчас вот колупаюсь с фолдингом (мне эта идея понравилась, сворачивать автоматом каждую запись), сделал, но хотелось бы вынести это отдельной функцией, а вот не выходит пока. :( С тегами быстро пролистал доку, понял откуда ноги растут и идею воплотил практически за минут 10. Только вот грепить действительно надо как-то придумать. Идея с хоткеем мне не очень нравится. Я бы предпочел запускать это по событию. В идеале по событию создания нового тега. Как это сделать - пока не знаю. Буду думать.
А вот по поводу 1251 - это извратство конечно же. ;) Ну в koi8-r еще куда не шло... :)))) Ладно, приколы, приколами, а я обычно для перекодировки использую iconv. :) Но это уже больше вопрос предпочтений.
no subject
Date: 2009-01-27 05:04 pm (UTC)А! А еще у меня в псевдо-фолдинговом режиме работает аутлайнер - тоже милая весч. Так что, да - фолдинг рулит однозначно, но я не знаю получится ли у меня его толком настроить (не меняя формат моего файла) или нет.
no subject
Date: 2009-01-27 05:08 pm (UTC)Пасибы за SQLite - я ходил мимо него и не видел. А решение отличное для некоторых моих целей, особенно тем, что не требует инсталлов и может управляться через тот же Питон.
В плане замены большого текстового файла на БД... тут - jedem das seine. А почему ты бы предпочел именно базу данных? Просто хорошо знаешь или есть какие-то фундаментальные преимущества.
no subject
Date: 2009-01-27 06:10 pm (UTC)Ну и вообще можно было xml использовать. Разметка же. И парсеры готовые есть.
no subject
Date: 2009-01-27 06:42 pm (UTC)Чисто эмпирически я пришел к выводу о том, что система сбора данных (а большой текстовый файл у меня нацелен именно на сбор-переработку-анализ-визуализацию-генерацию новых идей) должна доставлять как можно меньше геморроя при заполнении. Иначе я просто перестаю ею пользоваться. У меня даже таймстамповые аббревиатуры выбраны так, чтобы рифмовались + файл сразу открывается на нужном месте. Клац. Бэ-дэ-тэ-эс и - пошел набор текста (либо shift+insert, если нужно добавить ссылку). ZZ. Все. В любом другом случае у меня включается голова, что отвлекает меня от мысли, которую нужно записать. Примерно так. SQLight кажется мне мощным, но неинтуитивным и неспособным на "быстрый прием". Вполне может быть, что я что-то упустил - я только вчера про него начал читать :))
Аналогичная история с xml - каждый раз придется думать про теги, плюс вторая ловушка - чтобы посмотреть на чистый текст без тегов придется запускать браузер или что-нибудь еще в этом роде. А перечитывание и анализ заметок - это 70% всей работы с файлом. Я, кстати, в свое время отказался от стенографии (в свое время хорошо знал ГЕСС Соколова - пожалуй единственную систему, которую стоит изучать) - потому, что понял, что не могу схватить текст заметки одним взглядом, а дешифровка всегда будет тормозить процесс до невозможности. Кстати, не один я такой - народ недаром изобретает все эти markdown'ы и textile :) Собственно, моя разметка внутри файла - это тот же маркдаун (мракдаун :), только заточенный под мои нужды :)
Примерно так. Вообще, это я на самом деле попытался примерить систему на себя :) И то, что это не подходит мне - не значит что не подойдет вообще (я - зверек на редкость странный :) В любом случае SQLite ты помянул чертовски вовремя - мне сейчас как раз позарез была нужна БД такого типа. Бтв, вполне может быть так, что я как-нибудь напишу скрипт перегонки блога в базу данных - чтобы потом поковырять его запросами. Что тоже вариант.
Вообще, многое прояснилось для меня самого, пока я это писал :)) Так что спасибо еще раз :)))
no subject
Date: 2009-01-27 06:55 pm (UTC)no subject
Date: 2009-01-28 11:28 am (UTC)"Аналогичная история с xml - каждый раз придется думать про теги, плюс вторая ловушка - чтобы посмотреть на чистый текст без тегов придется запускать браузер или что-нибудь еще в этом роде."
Ну, фактически это достаточно легко решается. У того же питона есть интерфейс к GTK в котором есть компонент htmlview (или как-то так). И это все может вызываться прямо из баш/питон/ещечего скриптов.
"Кстати, не один я такой - народ недаром изобретает все эти markdown'ы и textile :)"
Да, маркдауны часто полезны, когда не нужен весь функционал маркапов %) Но, в моем случае, как раз от уже разработанного парсинга отказыаться нельзя :)
no subject
Date: 2009-05-06 11:48 am (UTC)А фолдинг реализован в АБТФ?
Как?