Введение
В последнее время я стал активно- упрощение процесса редактирования
- возможность подготовки черновиков постов в офф-лайн
Основой моих настроек для Vim’а послужила вот эта статья.
Установка скрипта для постинга и его настройка
В указанной выше статье описан скрипт b.py. Скрипт позволяет подготавливать тексты в форматеMarkdown
или reStructuredText
. Установка скрипта и необходимых
зависимостей описана в документации. Ему необходим
конфигурационный файл brc.py
подобного содержания:
import re
service = 'blogger'
service_options = {
'blog': YOUR_BLOG_ID
}
handlers = {
'Markdown': {
'match': re.compile(r'.*.(blog|markdown|md(own)?|mkdn?)$'),
'module': 'bpy.handlers.mkd',
'options': {
'config': {
'extensions': ['footnotes', 'toc'],
},
'smartypants': True,
},
}
}
С помощью строки
'match': re.compile(r'.*.(blog|markdown|md(own)?|mkdn?)$')
я настраиваю скрипт таким образом, чтобы он воспринимал также файлы с расширением blog
.После подготовки конфига необходимо выполнить авторизацию, как описано в документации. В результате в этом же каталоге будет создан файл
b.dat
с нужным токеном. Скрипт b.py
нужно обязательно
запускать из каталога, содержащего файлы brc.py
и b.dat
.Установка нужного filetype и подсветки синтаксиса
Файл поста - это частный случай Markdown-файла, поэтому я добавил в~/.vim/ftdetect/ftdetect.vim
следующую строку:
au BufRead,BufNewFile *.blog set filetype=blog syntax=markdown
Таким образом я сообщаю Vim’у что тип файла будет blog
, а вот для подсветки синтаксиса использовать те же
правила, что и для Markdown-файлов.Шаблон нового файла
Скрипт требует, чтобы каждый новый файл поста имел следующий заголовок!b
service: blogger
title: Some title
labels: List of tags
(после публикации в заголовок будет добавлен ещё ряд полей). Для задания шаблонов создаваемых файлов я
использую плагин aperezdc/vim-template. Поэтому добавил в
каталог для ведения блога файл .vim-template:*.blog
:
!b
service: blogger
title: %FILE%
labels: productivity, Vim, programming
%HERE%
После этого для создания нового поста необходимо ввести команду:
mvim "Ведение блога на Blogger с помощью Vim.blog"
(имя файла становится заголовком поста).
Настройки маппинга
В статье приводится настройка нескольких маппингов для:- публикации поста
- создания html-файла для предварительного просмотра
- проверки валидности ссылок, упоминаемых в посте
~/.vim/ftplugin/blog.vim
:
set autoread
map <buffer> <leader>post :exec '!b.py post '.shellescape(expand('%:p'))
Проверку ссылок я не делал, так как предлагаемый автором статьи способ не соответствует идеологии Vim (по-хорошему, проверку следует настроить через
makeprg
). К тому же, ссылки, как правило, вставляются
с помощью копирования, поэтому в проверке валидности особенного смысла нет.Как было указано ранее, скрипт после публикации поста добавляет в файл дополнительные заголовки. Опция
set autoread
заставляет Vim автоматически перечитывать файл после его изменения извне.Snippets
Для подсветки синтаксиса в блоге я использую highlight.js. Естественно, вручную каждый раз вводить<pre><code>...</code></pre>
некомильфо. Целесообразно это делать с помощью какого-нибудь сниппета.
С другой стороны, как отмечалось выше, файл поста - это частный случай Mardown-файла, поэтому было бы
неплохо использовать также сниппеты для таких файлов. С этой целью я создал следующий UltiSnip-файл:
extends markdown
snippet code "code fragment"
<pre><code class="${1:python}">$0
</code></pre>
endsnippet
Дополнительные улучшения
Чтобы ещё больше упростить вставку в текст блога файлов целиком (избежать цепочки действий: написать<pre>
… - открыть файл - скопировать - вставить) я написал такую функцию и команду:
func! s:InsertCode(file_name)
let code_lang = substitute(a:file_name, '[^\.]*\.', '', 'i')
call setline('.', getline('.').'<pre><code class="'.code_lang.'">')
norm! o
call setline('.', getline('.').'</code></pre>')
norm! k
exec "r ".a:file_name
endfu
command! -nargs=1 -complete=file Rc call s:InsertCode(<f-args>)
Так как аргументом команды является имя файла, то я указал
-complete=file
, чтобы Vim при нажатии на
Tab
выполнял нужное автодополнение.
Немає коментарів:
Дописати коментар