2009-06-30 11:08
Как мне раньше в голову не пришло? Сел и написал в течении пяти минут. /* и гораздо дольше возился оформляя пост со всеми его скобками и пр. */
добавить в .vimrc:
" навигация по разделам блога
map \j 0vey/^<C-R>" <CR>
map \k 0vey?^<C-R>" <CR>
map \J 0vehy/^<C-R>" <CR>
map \K 0vehy?^<C-R>" <CR>
Тупо - макросы выделяют начало заголовка - и перескакивают по нему дальше.
• Задача: встав на название раздела я хочу перейти к следующему разделу (то есть на следующий или предыдущий раздел с тем же уровнем в иерархии), либо к его подразделам.
Шорткаты выбраны так, чтобы наложиться на общую мнемонику - \j,\k - вверх-вниз плюс лидер, аналогично \J,\K - вверх-вниз по подразделам.
• Механизм работы:
0 - перейти к началу строки
v - войти в режим выделения
e - перейти к концу текущего слова (а текущее слово в данный момент - токены заголовка)
[h] - для перехода к разделу на уровень ниже (т.е. не к следующему разделу, уровня 3, а к подразделу уровня 2)
y - скопировать токен заголовка в буфер " и выйти из режима выделения
/ или ? - перейти в режим поиска вверх, либо вниз
^ - регэксп "начало строки"
<C-R>" - вставить в поисковую строку содержимое буфера " (искомый заголовок - что-то вроде ## или ###)+ пробел после нее
<CR> - перейти к следующему заголовку-параграфу
С возвратом сложнее - в смысле - с переходом от низкого к высокому уровню.
Можно тупо добить либо поменяв поисковый шаблон через / , либо набрав несколько раз <Ctrl+O> (вернуться назад по истории поиска).
• Забавная подробность.
Этот маппинг работает независимо от того, какой символ используется для обозначения раздела (что #, что ~, что = - все что угодно, главное, чтобы количество спецсимволов маркировало уровень раздела и было отделено пробелом от его названия).
Вот когда начинаешь писать такие макросы - можешь оценить все богатство Vim'овских шорткатов - все эти движения вперед-назад по самым разным предложениям, словам, буквам и параграфам. Они совершенно аффигительно упрощают написание сложных систем обработки делая простыми даже очень сложные операции.
Как мне раньше в голову не пришло? Сел и написал в течении пяти минут. /* и гораздо дольше возился оформляя пост со всеми его скобками и пр. */
добавить в .vimrc:
" навигация по разделам блога
map \j 0vey/^<C-R>" <CR>
map \k 0vey?^<C-R>" <CR>
map \J 0vehy/^<C-R>" <CR>
map \K 0vehy?^<C-R>" <CR>
Тупо - макросы выделяют начало заголовка - и перескакивают по нему дальше.
ПОДРОБНОСТИ
• Задача: встав на название раздела я хочу перейти к следующему разделу (то есть на следующий или предыдущий раздел с тем же уровнем в иерархии), либо к его подразделам.
Шорткаты выбраны так, чтобы наложиться на общую мнемонику - \j,\k - вверх-вниз плюс лидер, аналогично \J,\K - вверх-вниз по подразделам.
• Механизм работы:
0 - перейти к началу строки
v - войти в режим выделения
e - перейти к концу текущего слова (а текущее слово в данный момент - токены заголовка)
[h] - для перехода к разделу на уровень ниже (т.е. не к следующему разделу, уровня 3, а к подразделу уровня 2)
y - скопировать токен заголовка в буфер " и выйти из режима выделения
/ или ? - перейти в режим поиска вверх, либо вниз
^ - регэксп "начало строки"
<C-R>" - вставить в поисковую строку содержимое буфера " (искомый заголовок - что-то вроде ## или ###)+ пробел после нее
<CR> - перейти к следующему заголовку-параграфу
С возвратом сложнее - в смысле - с переходом от низкого к высокому уровню.
Можно тупо добить либо поменяв поисковый шаблон через / , либо набрав несколько раз <Ctrl+O> (вернуться назад по истории поиска).
• Забавная подробность.
Этот маппинг работает независимо от того, какой символ используется для обозначения раздела (что #, что ~, что = - все что угодно, главное, чтобы количество спецсимволов маркировало уровень раздела и было отделено пробелом от его названия).
Вот когда начинаешь писать такие макросы - можешь оценить все богатство Vim'овских шорткатов - все эти движения вперед-назад по самым разным предложениям, словам, буквам и параграфам. Они совершенно аффигительно упрощают написание сложных систем обработки делая простыми даже очень сложные операции.
no subject
Date: 2009-06-30 08:42 am (UTC)no subject
Date: 2009-06-30 08:49 am (UTC)no subject
Date: 2009-06-30 09:51 am (UTC)no subject
Date: 2009-06-30 10:09 am (UTC)no subject
Date: 2009-06-30 11:01 am (UTC)no subject
Date: 2009-06-30 11:53 am (UTC)2. Vim - очень гибко настраивается. В основном через .vimrc - текстовый файл, в который пишутся разные настройки, которые Vim читает на старте.
3. Мне понадобилось чтобы Vim сам прыгал по заголовкам внутри моего файла. Для этого я использовал маппинг - привязку к клавиатурным комбинациям определенных действий.
4. Маппинг делается с помощью команды map , которая к сочетанию клавиш key (например нажатие подряд "\j" в первой команде) привязывает определенное действие (все, что начинается с 0 для этого примера - что делает каждый код - описано в подробностях). После того, как я впишу четыре строчки в .vimrc - Vim по каждому нажатию подряд \j будет выполнять перечисленные действия.
5. Все прочее постигается последовательным освоением Vim, увы. Система внешне сложная, но сторицей окупает каждую потраченную на нее минуту.
no subject
Date: 2009-06-30 12:10 pm (UTC)no subject
Date: 2009-06-30 11:13 am (UTC)no subject
Date: 2009-06-30 11:56 am (UTC)Продолжаю радоваться виммеровской модели работы :) и богатству концепций, которые она порождает :)))
no subject
Date: 2009-06-30 11:59 am (UTC)Про n/N конечно же и так понятно. ;)
Ну а от порожденного богатства голова кругом идет - аж пипец. :)))))
no subject
Date: 2009-07-01 07:03 am (UTC)P.S. Сорри, что офтопик. ;)
no subject
Date: 2009-07-01 07:17 am (UTC)http://tengu-crow.livejournal.com/363615.html
ЖЖ опять порадовал - прицепили к нему мелкомягкое детище (подозреваю не задаром), а кучу недоделок так и оставили. Мало того - реклама детища прошла по вредленте залпами (выяснилось, что если подключить ЛивМесенджер "не глядя" он походу вывешивает от имени владельца ЖЖ пост во френдленту). Все это и вызвало возмущение и негодование :)
no subject
Date: 2009-08-23 07:53 pm (UTC)no subject
Date: 2009-08-27 08:12 am (UTC)ЗЫ Прошу прощения за время реакции на пост - весь месяц пребывал вне сети :)