如何用python脚本修改Vim缓冲区?

时间:2011-05-27 20:10:08

标签: python vim

官方的Vim python接口documentation声明,使用python修改缓冲区非常简单,基本上是:

:py import vim
:py vim.current.buffer[0] = "Hello world"

但是,当我尝试这样做时,python会抛出异常:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: bad argument type for built-in operation

只读访问权限(例如:py print vim.current.buffer[0]工作正常。我在这里遗漏了什么吗?为什么我不能用python脚本修改vim缓冲区?

[注意:我正在使用最近的Vim 7.3]

2 个答案:

答案 0 :(得分:3)

为我工作,“Hello World”插入缓冲区。你的vim是用+python

编译的

我使用的是7.3.162版本

修改

在hg日志中查找if_python.c我看到很多与python相关的问题,例如这一个:

changeset:   2641:b803b2776880
tag:         v7-3-062
user:        Bram Moolenaar <bram@vim.org>
date:        Tue Nov 16 19:26:02 2010 +0100
files:       src/auto/configure src/configure.in src/if_python.c src/if_python3.c src/version.c
description:
updated for version 7.3.062
Problem:    Python doesn't work properly when installed in another directory
        than expected.
Solution:   Figure out home directory in configure and use Py_SetPythonHome()
        at runtime. (Roland Puntaier)

你在哪个版本?

答案 1 :(得分:0)

这可能是编码问题。我遇到了一个非常相似(但不完全相同)的用例,例如:在vim python函数中:

buf = vim.current.buffer
names = [x.name for x in triggers] #encoded as a default python unicode, e.g. u'foo'
names = [x.encode('utf-8') for x in names] # Force to utf-8
buf[:] = names #Now this works.

不强制它进入utf-8,我得到了同样的异常,我认为这与vim如何处理python的默认(对我来说)us-ascii字符串有关。转换为utf-8后,它运行正常。我希望这会有所帮助。