vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner

Вот такие я себе завел макросы в vimrc:

au FileType markdown :map <buffer> ,l lbcw[<Esc>pa](wiki?name=<Esc>pa)<Esc>
au FileType markdown :vmap <buffer> ,l da[<Esc>pa](wiki?name=<Esc>:let @@=substitute(@@,' ','+','g')<CR>pa)<Esc>

Первый макрос простой, он работает если выделения нет и конвертирует слово под курсором в маркдауновскую ссылку на wiki. Но в нем есть хитрый хак - это первая команда 'l'.

Дело в том что команда b (переход в начало слова) в vim, переходит в начало следующего слова, если курсор уже находится в начале слова. А если курсор находится в пробеле после слова, переходит все равно в начале слова. То есть последовательность lb переводит в начало текущего слова, даже если мы там уже и были. И даже если были в его конце.

Ну а дальше все просто. Командой c мы удаляем слово (при этом оно попадает в неименованный буфер) вставляем скобку, слово, еще скобку, фиксированное начало url, еще раз слово, закрывающую скобку.

Вот со вторым вариантом хитрее. Если у нас есть выделенный фрагмент из несколькоих слов, мы его забираем в буфер, потом в квадратных скобках вставляем как есть, а потом надо прежде чем добавлять его как часть URL заменить плюсы на пробелы. Что мы и делаем заменяя значение переменной @@ (которая есть неименованный буфер) на результат применения к ней же функции substitute().

Надо бы туда добавить вторую функцию substitute, чтобы эскейпила скобки. Но я сходу не соображу сколько бэкслэшей надо в этом месте ставить чтобы после выполнения всех раундов подстановки остался только один. Можно, конечно, на %28 и %29 менять, но процент тоже эскейпить надо правильно.

Еще бы исхитриться замэпить Enter чтобы он по ссылке переходил, как это сделано в vimwiki. Но я читать чужие продвинутые vimscript еще не научился, поэтому не понял, как там опознают ссылки.

Date: 2022-07-14 03:45 pm (UTC)
phd_ru: (Default)
From: [personal profile] phd_ru
au FileType markdown -> ~/.vim/ftplugin/markdown.vim, не?

Date: 2022-07-15 05:10 am (UTC)
morthan2006: (Default)
From: [personal profile] morthan2006

С lbcw хорошая идея, надо будет использовать. Я в таких случаях обычно пользуюсь ciw, но оно сработает только если курсор на слове.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

May 2025

S M T W T F S
    1 2 3
4 56 7 8 9 10
11 12 131415 1617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 23rd, 2025 07:51 am
Powered by Dreamwidth Studios