среда, 20 июня 2012 г.

Плагин pyinteractive-vim

Удобно ли вам работать во встроенном интерпретаторе python в vim`e? (для тех кто не в курсе команда :python) Не думаю. Ведь там нет многого, к чему мы привыкли в нормальных интерактивных консолях, например авто-завершения или авто-отступов. Так же всё время писать :py для ввода кода, несколько утомляет. Тут мне могут возразить, мол лучше пользоваться полноценными шелами вроде ipython. Но тогда вы не получите доступа к внутренностям vim с помощью одноимённого модуля, да и переключать всё время окошки тоже занятие не из весёлых.
Руководствуясь всеми этими причинами, я решил упростить себе жизнь и написать плагин к vim, для более комфортной работы со встроенным интерпретатором.


И так что же умеет мой плагин:

  • авто-завершение кода
  • авто-отступы при написании многострочного кода
  • расширенный синтаксис (похожий на ipython, например max? выведет справку)
  • сохранение истории сессии
Для того чтобы вызвать интерпретатор, нужно выполнить команду  PyInteractiveREPL.
После чего появится стандартное приветствие python ( '>>>' ). Всё, теперь командное окно vim переключилось в режим python шелла. Для того чтобы закончить сеанс жмём <ESC>.
Важное примечание, всё что вы вводили в сеансах, сохраняется между ними.

Для авто-завершения используется <TAB>
Совет, если вы ходите чтобы вывод вариантов авто-завершения был более информативным, советую прописать в vimrc следующее:

set wildmode=list:longest,full

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

Пример работы с pyinteractive:


:PyInteractiveREPL
>>> def inc_10(x):
...     return x+10
...
>>> inc_10(7)
17
>>> import sys
>>> sys.ex<tab> # (see pyinteractive-autocompletion)
<built-in function exit>

<ESC>

:PyInteractiveEval inc_10(11) +1
22
:PyInteractiveHistory
 in[1]: def inc_10(x):
 in[2]:     return x+10
 in[3]:
 in[4]: inc_10(7)
out[1]: 17
 in[5]: import sys
 in[6]: sys.exit
out[2]: <built-in function exit>
 in[7]: inc_10(11) +1
out[3]: 22

Видео, демонстрирующее работу плагина (старая версия) 



Репозиторий  плагина на github

4 комментария:

  1. Попробую, показалось очень интересным, я с "питоном" только начинаю. Спасибо!

    ОтветитьУдалить
    Ответы
    1. Сергей, большая просьба, в случае использования, опишите дальнейшие пожелания по улучшению плагина.

      Удалить
  2. Я только начинаю, попробовал и мне понравилось. Конечно нет раскраски кода, но и в python shell ее тоже нет. А так всем рекомендую!

    ОтветитьУдалить
    Ответы
    1. Рад стараться. Подсветку тут к сожалению не организовать, в силу реализации

      Удалить