![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
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'овских шорткатов - все эти движения вперед-назад по самым разным предложениям, словам, буквам и параграфам. Они совершенно аффигительно упрощают написание сложных систем обработки делая простыми даже очень сложные операции.