Ссылки в markdown и vim
Jul. 14th, 2022 05:45 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Вот такие я себе завел макросы в 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 еще не научился, поэтому не понял, как там опознают ссылки.
no subject
Date: 2022-07-14 03:45 pm (UTC)au FileType markdown
->~/.vim/ftplugin/markdown.vim
, не?no subject
Date: 2022-07-14 03:53 pm (UTC)Вот увы, плагинов для маркдауна в vim существует море. И все меня чем-то не устраивают. Поэтому я погожу пока писать свой, n+1. Для начала надо определиться, чем же я всё-таки хочу отличаться от остальных.
На самом деле эти команды не для маркдауна вообще, а исключительно для правки фоссиловских вики-страниц. Поэтому, вероятно их в будущем надо будет засунуть в какой-то другой файл, который загружается только если используется режим редактирования фоссиловского wiki.
То есть это скорее часть fossil-плагина, чем markdown-плагина.
no subject
Date: 2022-07-15 05:10 am (UTC)С
lbcw
хорошая идея, надо будет использовать. Я в таких случаях обычно пользуюсьciw
, но оно сработает только если курсор на слове.