Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Пока Vim пишет код за Вас…

Anna | 16.06.2014 | нет комментариев
Не буду длинно распинаться на тему того, насколько крупен и могуч Vim — это теснее давным-давно и доподлинно вестимо. Кто-то даже заявляет, что «Фактически любая строка латинских букв является синтаксически правильной командой для vi».

Изредка программист настоль тонко познает темную сторону силы, что Vim начинает писать код взамен него, оставляе время для медитации и прочих пригодных пророческой. Одним из таких пригодных дел может быть написание очередного супер пригодного плагина. Дальнейшие строки сего скромного трактата повествуют именно об этом.

Действующие лица

Собственно, их каждого два — Vim и Python. Но взаимодействие этих компонент приводит к тысяче изменений и десяти тысячам перевоплощений. И вот некогда, когда меня в следующий раз посетило желание перенести часть моей повседневной активности в Vim, я взялся за написание плагина для чтения постов с основной страницы reddit. Идея предельно примитивна — вытягивать список постов в json формате и отображать их в форматированном виде в буффере редактора. Ну и, безусловно, эта задумка носила Отчасти образовательный нрав.

В качестве доступных вариантов для написания плагина существуют Vimscript, Python, Ruby. Не имею вероятности сравнить их превосходства и недочеты, скажу лишь, что Python был выбран легко потому, что я с ним отлично знаком.

Плагин: Предисловие

Самый легкой плагин для Vim представляет собой файл с растяжением *.vim — но отменнее так не делать) Сотворим директорию с плагином, которую поместим в .vim/bundle/ (используем vundle). Внутри заведем директорию plugin с исходниками и добавим строку Bundle ‘vim-reddit’. Позже этих телодвижений плагин будет запускаться при старте Vim.

Основой плагина будет являться все же код, написанный на Vimscript (reddit.vim). В нем будут содержаться некоторые настройки, подсветка отображаемых постов, а также обертка для вызова Python кода. Лаконично расскажу об основных моментах и «правилах отличного тона» (правда я и сам их порой игнорирую).

Т.к. в коде мы будем применять Python, нужно проверить, что Vim собран с помощью этого языка:

if !has('python')
    echo "Error: Required vim compiled with  python"
    finish
endif

После этого нужно проверить, не был ли загружен плагин вторично. Если нет — открыто извещаем миру о своем присутствии:

if exists('vim_reddit_module')
    finish
endif
let vim_reddit_module = 1

Python модуль

После этого начинается основное действо. Для начала, раскрою ужасный секрет запуска кода на Python из Vimscript:

function! Reddit()

python << EOF
# some function
main()
EOF

endfunction

Внутри блока дозволено расслабиться, и вызвать пару питоновских библиотек) Сотворим модуль reddit.py(__init__.py подразумевается), тот, что будет исполнять всю работу по загрузке json. Но легко так подключить его не получится, т.к. питон не сумеет обнаружить данный модуль. Для выхода из этой трагичной обстановки дозволено добавить путь к модулю в sys.path:

import sys, vim
sys.path.append(vim.eval("expand('<sfile>:p:h')"))

Предполагаю, вы теснее додумались, что способ eval изготавливает вычисление команды Vim и возвращает итог) Позже этого дозволено со мирной душой импортировать модуль:

from reddit import main
main()

Сейчас плавно перейдем к тому безобразию, которое происходит в reddit.main(). Вновь же, пропущу никому неинтересные подробности загрузки json и сразу пройдусь по особенностям. А из особенностей тут, вероятно, только работа с буффером. Дело в том, что нынешний буффер, в тот, что будем добавлять загруженные посты, представляет собой примитивный массив строк. Следственно, чистка выглядит вот так:

del vim.current.buffer[:]

а добавление строки вот так:

vim.current.buffer[0] = "Reddit front page


Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB