Введение
Редактор Vim наиболее известен среди разработчиков в системах Unix – конкурент emacs
, что-то вроде консольного IDE – этот редактор при должной сноровке и настройке (мне кажется, сноровке несколько меньшей и настройке более очевидной чем в emacs
, но у последнего также есть мощная мультифункциональность – выбор за программистом) способен убыстрить и упростить многие процессы на этапах разработки не в ущерб таким удобствам как, например, авто-дополнение и навигация по проекту. Однако, если вы собираетесь использовать его для разработки на Python со всеми подобными удобствами – потребуются некоторые усилия: а именно, перекомпиляция…
Приведу несколько ссылок по теме:
-
Vim How-To — Работа в
vim
. Небольшое, но грамотное, вводное руководство. (полное содержание, содержит справочник по командам) - Набор изображений (читшитов) для быстрого и наглядного изучения сочетаний клавиш. (англ.)
- Статья по использованию vim на Хабрахабре
- Настройка Vim для работы с Python – статья с подробным рассмотрением настройки и упоминанием всех необходимых дополнений
- Компилирование (g)Vim для Windows – статья, послужившая основой для написания той, которую вы читаете. (англ.)
- Альтернативная статья на ту же тему – более краткая, но о Python 2.5
- Некоторые заметки о работе c Python в редакторе Vim. (англ.)
Версии
Компиляция производилась с использованием [g]Vim 7.1
, Python 2.5.2
, Tcl 8.5.1
, Cygwin 1.5.25-11
на Windows XP SP2
, но сценарий при этом должен быть насколько возможно независим от версий.
Установка необходимых программ
Итак, подготовка. Нужно заранее установить сам язык – Python (если он не установлен) и, если вы собираетесь использовать Tcl – соответственно Tcl/Tk (с некоторого времени язык стал владением ActiveState: можно скачать бесплатный ActiveTcl). При компиляции используются динамические библиотеки соответствующих языков.
Для работы с архивами и собственно компиляции нам понадобится эмулятор Unix-утилит под Windows - это Cygwin. В нём существуют и компилятор gcc
, и необходимые для компиляции файлы (есть путь с компилятором Borland, но он несколько сложнее). Файл установки работает немного непривычным образом – скачивая и файлы установки и пакеты уже после вашего выбора (если вы выберете установку из Интернет, которая в первый раз в любом случае необходима) – при этом для обновления или до/переустановки пакетов вы, возможно, будете возвращаться к инсталлятору довольно-таки часто. Тем не менее, чтобы установить минимальный набор необходимых для нашего случая вещей – нужно отметить лишь пару пунктов: после выбора способа установки (на данный момент наиболее стабильно для меня работало зеркало ftp://mirror.switch.ch
(хотя буквально в эти секунды его исключили из списка официальных зеркал): если будут ошибки закачки – вас снова вернут к выбору зеркала) в списке выбора пакетов убедитесь что вы находитесь в режиме Category
(переключив его, если надо, кнопкой View
вверху), рядом с пунктом All
, несколько раз потыкав надпись Default
поменяйте её на Uninstall
(чтобы не устанавливать ненужных пакетов) и выберите следующие пункты – Utils/patch
, Devel/gcc-g++
, Devel/make
, System/man
и Devel/gcc-mingw
(последний, возможно, будет уже заранее выбран, значит они уже исправили одну проблему, которая отражалось на удачной компиляции :) ) — при этом у вас автоматически станут выбраны некоторые другие относительно необходимые пакеты (можно перепроверить): Shells/bash
, Utils/bzip2
и Devel/mingw-runtime
(последний, тем не менее, безмерно важен). Также советую установить Web/wget
для того, чтобы облегчить в дальнейшем закачку патчей. Всё, можно жать установку.
Затем нужно, собственно, установить gVim. Можно заранее его настроить под Python, руководствуясь статьей, упомянутой выше — тогда при попытке подключения авто-дополнения Vim будет сообщать о необходимости перекомпиляции с ключом +python
, что мы и планируем сделать.
Подготовка
Запустите cmd
и убедитесь, что в переменных окружения USERNAME
и USERDOMAIN
содержатся ваше имя и имя вашего компьютера и домена соответственно (echo %username%@%userdomain%
), а PATH
содержит путь к bin
-каталогу Cygwin. HOME
может указывать на ваш каталог “Мои документы” (туда, где находится ваш файл настройки vim — vimrc
), а VIM
– на месторасположение установленного, рабочего редактора vim, желательно в формате 8.3
(напр.: C:\PROGRA~1\VIM
). Значения переменных можно изменять в диалоге, расположенном здесь: Мой компьютер → Свойства → Дополнительно → Переменные среды.
Не менее, а даже более нам необходимы исходники, поэтому скачиваем их для соответствующей установленной версии (будьте внимательны – именно исходники для Unix, даже при компиляции под Win32) (по предыдущей ссылке также можно скачать файлы для отладки, но отлаживание в этой статье не рассматривается и в их присутствии нет необходимости). Поверх этих исходников нужно добыть дополнение для Windows (-extra
) и файлы языков (-lang
) соответствующей версии отсюда.
Также, если вы используете стабильный релиз и хотите заодно установить новейшие патчи – за файлами патчей обращайтесь сюда (исправьте номер версии в ссылке, если нужно). Здесь есть некоторая проблема, поскольку файлы патчей упаковываются в один только при достижении сотни (001-100, 101-200 и т.д.), поэтому если их, например, 275 – последние 75 файлов придётся закачивать руками или написав batch-скрипт с использованием telnet
. Однако, у нас уже установлен {{cygwin}}, поэтому можно создать .sh
-скрипт, выполняющий те же функции через wget
, выглядеть это может примерно так:
PATCHES_DOWNLOAD_PATH=ftp://ftp.vim.org/pub/vim/patches
PATCHES_VER=7.1
wget $PATCHES_DOWNLOAD_PATH/$PATCHES_VER/$PATCHES_VER.001-100.gz
wget $PATCHES_DOWNLOAD_PATH/$PATCHES_VER/$PATCHES_VER.101-200.gz
for i in `seq 201 278`;
do
wget $PATCHES_DOWNLOAD_PATH/$PATCHES_VER/$PATCHES_VER.$i
done
Теперь займёмся расположением исходников в виде, удобном для компиляции.
Архивы с исходником, -extra
и -lang
нужно распаковать (по очереди, с заменой более старых файлов) в какой-либо каталог с сохранением структуры (пусть в нашем случае это будет C:/devel/vim-src/vim71
), в нём должны содержаться каталоги /doc
, /nsis
, /src
, /farsi
и т.д.. В распаковке вам поможет или bzip2
из Cygwin, или встроенный архиватор файлового менеджера Total Commander или архиватор 7-zip или любой другой архиватор, поддерживающий архивы .tar.gz
:).
В подкаталог /runtime
можно положить файлы .vim
, каталоги /doc
и /plugins
из рабочей версии вашего редактора vim – тогда они будут пропатчены соответственно, если вы выбрали путь компилирования с патчами. Патчи при этом можно положить в каталог /patches
.
Компиляция
Для того, чтобы установить патчи, нужно выполнить над каждым из них команду patch из набора Cygwin, предварительно распаковав архивы файлов с сотнями патчей. В этом случае я воспользовался .bat
-файлом вместо .sh
скрипта (номера патчей, конечно, нужно, поправить на соответствующие вашему набору):
@ECHO off
ECHO changing directory to parent...
CD ..
ECHO -------------------- %Date% -------------------- >> patching-src.log
ECHO %CD%: applying first 200 patches
patch -p0 < patches/7.1.001-100 >> patching-src.log 2>&1
patch -p0 < patches/7.1.101-200 >> patching-src.log 2>&1
ECHO %CD%: applying the last patches
FOR /L %%B IN (201,1,278) DO
patch -p0 < patches/7.1.%%B >> patching-src.log 2>&1
ECHO Finished
PAUSE
@ECHO on
Этот файл нужно положить в каталог /patches
и после корректировки выполнить (убедитесь, что вся описанная выше структура дерева исходников сформирована): в корне исходников будет создан файл patching-src.log
, в котором можно проследить результаты прошедшего патчинга. Если утилита patch
не была найдена, проверьте PATH
на наличие пути к Cygwin. Если некоторое (небольшое) количество файлов не было найдено и пропатчено – можно сильно не беспокоится, это в основном файлы для XWindow-версии.
Теперь можно перейти непосредственно к компиляции из консоли Cygwin. Для этого необходимо удачно выполнить лишь три команды — перейти в каталог с исходниками (cygwin монтирует ваши диски в точке /cygdrive/
: подставьте корректные пути к вашей установке Python и Tcl а также их корректные версии, а если вы не компилируете версию для Tcl – просто уберите соответствующие параметры) и создать файлы vim.exe
(консольная версия) и gvim.exe
(GUI-версия):
$ cd /cygdrive/c/devel/vim-src/vim71
$ make -B -f Make_cyg.mak GUI=no \
PYTHON=/cygdrive/c/devel/Python PYTHON_VER=25 DYNAMIC_PYTHON=yes \
TCL=/cygdrive/c/devel/Tcl TCL_VER=85 DYNAMIC_TCL=yes vim.exe
$ make -B -f Make_cyg.mak OLE=yes \
PYTHON=/cygdrive/c/devel/Python PYTHON_VER=25 DYNAMIC_PYTHON=yes \
TCL=/cygdrive/c/devel/Tcl TCL_VER=85 DYNAMIC_TCL=yes gvim.exe
На предупреждения и даже некоторые ошибки, если они относятся к Python или Tcl и если процесс продолжается, а в результате .exe
-файлы созданы, можно не обращать внимания. Если всё завершилось удачно, то в каталоге /src
вы найдёте оба .exe
-файла. Сделайте бэкап существующих файлов в рабочем, установленном vim (например, vim.exe.bak
и gvim.exe.bak
) и замените их только что скомпилированными. Если вы применяли патчи, то верните обратно *.vim
файлы, каталоги /doc
и /plugins
из каталога /runtime
, предварительно сделав бэкапы и для них и заменяя старые версии. После этого запустите gVim и vim из папки рабочего vim, проверьте версию и опции компилирования там же на присутствие +python
– в большинстве случаев всё должно сложиться удачно.
Возможные ошибки
В процессе компилирования мне встретилось две ошибки: cannot exec
cc1’: No such file or directoryи
ld: cannot find -lgcc. Обе они [известны авторам](http://www.mail-archive.com/cygwin@cygwin.com/msg10910.html) Cygwin, однако в моём случае в скачанных мной версиях они ещё не были решены. Первая временно решается предварительным (перед компиляцией) добавлением каталога с исполняемым файлом
cc1.exeв локальный
PATH` cygwin:
$ PATH=$PATH:/cygdrive/c/devel/cygwin/lib/gcc/i686-pc-cygwin/3.4.4
Вторая решается так, как должна была решаться и первая – установкой Devel/gcc-mingw
(её обещали сделать автоматической при выборе gcc
в будущем) при установке Cygwin. При этом важно установить пакеты одновременно, поэтому если ошибка всё равно появляется – попробуйте выбрать режим Reinstall
в установщике Cygwin в том месте, где до этого вы выбирали режим Uninstall
и установите Cygwin заново.
Настройка Vim для Python
(Upd.)
На основе этой статьи я создал пак (взять можно здесь) из последних версий упомянутый в ней плагинов (Project, PythonComplete, NERD_Commenter, VCSCommand, RunScript и TagList плюс, поверх — PyDiction) + минимальной настройки (в ftplugin/python.vim
, практически идентичный соответствующему в статье (изменённая функция TabWrapper + другой способ подключения словаря) – только общепринятые стандарты, omni completion повешен на Tab
). Содержимое требуется распаковать в каталог <путь_к_установленному_vim>\vimfiles
. Для плагина taglist потребуется скачать ctags отсюда, и распаковав полученный архив в некоторый каталог, добавить путь к нему в переменную окружения PATH
. Затем нужно запустить vim и выполнить команду:
:helptags $VIM\vimfiles\doc
После этого можно будет использовать команду :help <название_плагина>
для получения документации по соответствующему плагину.
Обычное автодополнение при использовании настроек из пакета работает по Tab
, дополнение по контексту (omni completion) – по Ctrl+Enter
и Ctrl+Space
, а дополнение по ключевым словам и модулям – по Ctrl+Tab
(при большом количестве вариантов словарь загружается относительно долго, поэтому намеренно установлено не очень удобное сочетание).
Для того, чтобы вставлять предлагаемые по спецификации строки в заголовки python-файлов при создании, добавьте нижеприведённый код в файл <путь_к_установленному_vim>\_vimrc
(строка filename добавлена для демонстрации возможности добавления имени файла):
function! BufNewFile_PY()
0put = '#!/usr/bin/env python'
1put = '#-*- coding: utf-8 -*-'
$put = '#-*- filename: ' . expand('') . ' -*-'
$put = ''
$put = ''
normal G
endfunction
autocmd BufNewFile *.py call BufNewFile_PY()
…Вот теперь можно c чрезвычайным удобством программировать на Python.