Привет, коллеги. Это заметка не про редактирование кода на питоне - здесь писать особо нечего, всё понятно - а про интегрированный в Вим язык Питон. Мне больше по душе Перл, но в Вим по умолчанию идет Питон, причем третий. О нем и расскажу.
Можно выполнить команду:
:python3 ...
Например, :python3 print("Vaffanculo!")
Можно выполнить целый скрипт, указав маркер его конца:
:python3 << МАРКЕР
Маркер является любым текстом и должен идти от начала строки без пробелов. Следующие строки трактуются как код на Питоне, пока не встретится маркер. Эта техника позволяет вставить Питон в скрипты на языке Вим. Маркер можно не указывать, по умолчанию его роль играет одинокая точка.
Это пока просто чуть более простой путь выполнить код на Питоне, хотя есть же прямой выход на него через вызов самого интерпретатора:
:!python3 ...
Но этот язык интегрирован куда глубже. В частности, есть команда py3do, принимающая код на Питоне и которой можно передать диапазон строк. Команда по существу трактует свой аргумент как тело процедуры
def _vim_pydo(line, linenr):
и эта процедура вызывается на каждой строке диапазона и получает, как видно из имен параметров, текст строки (без завершающего символа конца строки) и ее номер. Процедура должна вернуть строку или None. Возвращенная строка заменяет текущую. По умолчанию диапазон - это весь файл. Примеры:
:py3do return "%s\t%d" % (line[::-1], len(line))
:py3do if line: return "%4d: %s" % (linenr, line)
Первая добавляет к строке ее длину и выворачивает строку наоборот, вторая добавляет к началу строки ее номер.
А :py3file выполняет скрипт из файла.
Но и это ещё не полная интеграция. Полную обеспечивает модуль vim. Его надо загрузить:
:python3 import vim
Далее вы имеете полный доступ к Виму. Можно выполнить команду:
:py3 vim.command(cmd)
У вас есть окна:
py3 w=vim.current.window
py3 w.height=42
Позиция курсора (w.cursor), буферы (vim.current.buffer), причем текст в буфере можно читать и записывать (это массив строк).
Объект vim.current дает доступ к текущей строке, окну, буферу и диапазону строк. Есть доступ к переменным и опциям. В общем, всё, что даёт и скриптовый язык Вим. Кому-то Питон привычнее...
Вывод весь перенаправляется в сообщения (просто сообщения или ошибки) Вим. А вот ввод пока не поддерживается, такие попытки могут вообще обвалить всё. Обещают пофиксить. Но - зачем он?
В справке подробно описаны все объекты и примеры работы с ними.
Если у вас Вим собран с поддержкой Питона-2, то уберите тройку из всех команд выше, и всё будет работать. Если Вим собран с поддержкой обоих, крайне не рекомендуется смешивать их.
Удачи, коллеги!