"скриптинг" vim с использованием Python с большей детализацией - PullRequest
0 голосов
/ 20 октября 2011

Я пытаюсь написать скрипт на python, который может автоматизировать vim, но интерфейс python vim не дает мне достаточно сил, чтобы делать все, что мне нужно. Я хочу общаться с vim, как если бы мой скрипт был tty (мог выдавать инструкции "визуального режима" и т. Д.). Что касается vim, мой сценарий - это человек, использующий xterm (или что-то еще). Можно ли это сделать без создания собственного эмулятора терминала в python?

1 Ответ

1 голос
/ 23 октября 2011

Все не-vimscript интерфейсы прокляты: единственный способ связи с vim (если вы не хотите редактировать / получать содержимое буфера, доступного с использованием объекта буфера) - это execute (vim.command(string) в Python) и eval (vim.eval(string) в Python), оба требуют сериализации аргументов.Если вы хотите просто запустить визуальный режим, используйте

vim.command("normal! V")

или

vim.eval("feedkeys('V')")

.Но если вы хотите, например, вернуть некоторое значение функции вызывающей стороны, вам придется использовать

import json
# Some code that puts result into variable r
# This won't work if r contains non-unicode strings,
# you will have to write your own serializer in this case.
# As far as I know, it will also fail if some characters in the string
# can be represented only using surrogate pairs.
vim.command("let reply=".json.dumps(r))
# Now in the caller function variable l:reply is defined
...